首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何生成一个高级流,它既匹配又比较不同时匹配的地方?

如何生成一个高级流,它既匹配又比较不同时匹配的地方?
EN

Stack Overflow用户
提问于 2022-03-15 13:55:03
回答 1查看 53关注 0票数 0

我有两个Person对象列表(List1List2):

代码语言:javascript
运行
复制
public class Person {

  ObjectId id;
  private List<String> names;
  private Integer age;

}

我想比较这些列表,只要id上有匹配项,我想检查年龄是否匹配。如果年龄匹配,那么我不想做任何事情,但是如果年龄不匹配,我想返回名称。

因此,我应该得到一个Set (没有重复的),它包含来自两个列表中都有I但年龄不匹配的所有对象的名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-15 15:13:56

您可以过滤这两个列表,将它们连接起来,并将其平面映射到名称。类似于:

代码语言:javascript
运行
复制
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

....


List<Person> list1 = //your first list
List<Person> list2 = //your second list

BiPredicate<Person,Person> sameIdDiffAge = (p1,p2) -> Objects.equals(p1.getId(),  p2.getId()) &&
                                                     !Objects.equals(p1.getAge(), p2.getAge());
Set<String> result =
        Stream.concat(list1.stream().filter(p1 -> list2.stream().anyMatch(p2 -> sameIdDiffAge.test(p1,p2))),
                      list2.stream().filter(p1 -> list1.stream().anyMatch(p2 -> sameIdDiffAge.test(p1,p2))))
        .flatMap(p -> p.getNames().stream())
        .collect(Collectors.toSet());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71483484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档