java8新特性stream,两个 list<对象> 进行合并

两个查询到的集合是:

list1的id 和list2的 userId 字段相等

想要的结果,包含 list1的 id,name 和list2的 userId,achievement1,achievement2

resultList = list1.stream().map(l1 -> list2.stream().filter(
                    l2 -> Objects.equals(l1.getId(),l2.getUserId())
            ).findFirst().map( l2 -> {
                l2.setId(l1.getId());
                l2.setName(l1.getName());
                return  l2;
            }).collect(Collectors.toList());

解释:

判断是否相等,相对就进入赋值

Objects.equals(l1.getId(),l2.getUserId())

为哪个list赋的值可以返回当前list

l2.setId(l1.getId()); l2.setName(l1.getName()); return l2;

如果想要的结果是list1的话

list1.stream().map(l1 -> list2.stream().filter(
                    l2 -> Objects.equals(l1.getId(),l2.getUserId())
            ).findFirst().map( l2 -> {
                l1.setAchievement1(l2.getAchievement1());
                l1.setAchievement2(l2.getAchievement2());
                return  l1;
            }).collect(Collectors.toList());

执行之后,list1中的数据语句被改变了

经验分享 程序员 微信小程序 职场和发展