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

两个查询到的集合是:

java8新特性stream,两个 list<对象> 进行合并_第1张图片

 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中的数据语句被改变了

你可能感兴趣的:(stream,java,servlet,开发语言)