Java 集的并集或交集

新手上路,请多包涵

在 Java 中 Set 的并集或交集的最简单方法是什么?对于这个简单的问题,我已经看到了一些奇怪的解决方案(例如,手动迭代这两个集合)。

Java 集的并集/交集

原文由 Mahozad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 617
2 个回答

最简单的单线解决方案是这样的:

 set1.addAll(set2); // Union

 set1.retainAll(set2); // Intersection

上面的解决方案是 破坏性 的,意味着我改变了原来的 set1 的内容。

如果您不想修改现有的集合,请创建一个新集合:

 var result = new HashSet<>(set1);          // In Java 10 and above
Set<Integer> result = new HashSet<>(set1); // In Java < 10

 result.addAll(set2); // Union

 result.retainAll(set2); // Intersection

原文由 Mahozad 发布,翻译遵循 CC BY-SA 4.0 许可协议

虽然 guava 确实更整洁并且几乎是标准的,但这是一种仅使用标准 Java 进行并 相交 的非破坏性方法

Set s1 = Set.of(1,2,3);
Set s2 = Set.of(3,4,5);

Set union = Stream.concat(s1.stream(),s2.stream()).collect(Collectors.toSet());
Set intersect = s1.stream().filter(s2::contains).collect(Collectors.toSet());

原文由 David Lilljegren 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏