Voiss 2019-09-29 15:25 采纳率: 0%
浏览 17766
已结题

如何使用Java8Lambda表达式对两个List<Object>中的多个元素进行对比筛选

        List<Student> list = new ArrayList<>();
        List<Student> list2 = new ArrayList<>();

        Student student1 = new Student();
        student1.setAge("一");
        student1.setSex(1);

        Student student2 = new Student();
        student2.setAge("一");
        student2.setSex(2);

        Student student3 = new Student();
        student3.setAge("三");
        student3.setSex(3);

        Student student4 = new Student();
        student4.setAge("四");
        student4.setSex(4);

        // List2
        Student student5 = new Student();
        student5.setAge("一");
        student5.setSex(1);

        Student student6 = new Student();
        student6.setAge("二");
        student6.setSex(9);

        Student student7 = new Student();
        student7.setAge("三");
        student7.setSex(9);

        Student student8 = new Student();
        student8.setAge("四");
        student8.setSex(9);

现在想要的结果是筛选出两个List中age,sex都一样的元素组成一个新List


        Set<Student> s = list.stream()
                .map(
                        user -> list2.stream()
                        .filter(log -> user.getAge().equals(log.getAge()))
                        .filter(log -> user.getSex() == log.getSex())

                        .findAny()
                        .orElse(user)

                        )
                .collect(Collectors.toSet());
```                         我自己试了下好像并没有卵用
  • 写回答

1条回答

  • VICTOR_fusheng 2019-09-29 17:11
    关注

    orElse的作用是如果没有发现则返回某个值,你的代码是没有相同的时候还是返回了list中的值,实际没有做任何操作,可以把user换成null,
    Set s = list.stream()
    .map(
    user -> list2.stream()
    .filter(log -> user.getAge().equals(log.getAge()))
    .filter(log -> user.getSex() == log.getSex())

                                .findAny()
                                .orElse(null)
                        )
                .filter(Objects::nonNull)
                .collect(Collectors.toSet());
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料