m0_56112450 2021-06-05 13:08 采纳率: 100%
浏览 23
已采纳

Steam流式计算的一道题,求大神帮忙解答。

/**
 * 题目要求:一分钟内完成此题,只能用一行代码实现
 * 现在有五个用用户!筛选:
 * 1、ID必须为偶数
 * 2、年龄必须大于23岁
 * 3、用户名转化为大写
 * 4、用户名字母倒着排序
 * 5、只输出一个用户
 */
public class Test1 {
    public static void main(String[] args) {
        User u1 = new User(1, "aa", 21);
        User u2 = new User(2, "bb", 22);
        User u3 = new User(3, "cc", 23);
        User u4 = new User(4, "dd", 24);
        User u5 = new User(6, "ee", 25);
        //集合就是管存储
        List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
 
        list.stream()
                .filter(u->{return u.getId()%2==0;})
                .filter(u->{return u.getAge()>23;})
                .map(u->{return u.getName().toUpperCase();})
                .sorted((uu1,uu2)->{return uu2.compareTo(uu1);})
                .limit(1)
                .forEach(System.out::println);
 
    }
}

上面是Staam计算的链式编程过程,我进行了分解,到了sorted这边是在没有思路了

public class Test {
    public static void main(String[] args) {
        User u1 = new User(1, "aa", 21);
        User u2 = new User(2, "bb", 22);
        User u3 = new User(3, "cc", 23);
        User u4 = new User(4, "dd", 24);
        User u5 = new User(6, "ee", 25);
 
        //集合就是管存储
        List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
 
        //Stream流计算
        //1、第一步先把集合变为流,变成Stream类型
        Stream<User> stream = list.stream();
 
 
        //2、filter()方法:把ID为偶数的对象挑出来
        Predicate<User> predicate1 = new Predicate<User>() {
            public boolean test(User u) {
                if (u.getId() % 2 == 0) {
                    return true;
                }else {
                    return false;
                }
            }
        };
        Stream<User> stream1 = stream.filter(predicate1);//filter方法只输入判断为true的对象
 
 
        //3、filter()方法:把年龄大于23岁挑出来
        Predicate<User> predicate2 = new Predicate<User>() {
            public boolean test(User u) {
                if (u.getAge()>23) {
                    return true;
                }else {
                    return false;
                }
            }
        };
        Stream<User> stream2 = stream1.filter(predicate2);//filter方法只输入判断为true的对象
 
 
        //4、map()方法:获取用户名
        //toUpperCase()方法:把字符串改为大写
        Function function1 = new Function<User,String>() {//写好泛型
            public String apply(User user) {
                String name=user.getName().toUpperCase();//把用户名改为大写
                return name;
            }
        };
        Stream stream3 = stream2.map(function1);
 
 
 
          就是这边,cmpareTo()方法被重写了,没有思路去分解出来
        //5、sorted()方法:把用户名倒着排序
        Comparable<Stream> comparable = new Comparable<Stream>() {
            @Override
            public int compareTo(Stream o) {
                return 0;
            }
        };
    }
}
  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-06-05 13:57
    关注
     Collections.sort(list, new Comparator<User>() {
                @Override
                public int compare(User o1, User o2) {
                    return  o1.getName() > o2.getName() ? 1 : (o1.getName() == o2.getName() ? 0 : -1);
                }
            });
    
    

    用这种把。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥30 python安卓开发
  • ¥15 使用R语言GD包一直不出结果