Java 集的并集或交集

在Java中制作s的并集或交集的最简单方法是什么?我见过一些奇怪的解决方案来解决这个简单的问题(例如,手动迭代两个集合)。Set

Union/Intersection of Java sets


答案 1

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

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

答案 2

虽然番石榴肯定更整洁,而且非常标准,但这是一种仅使用标准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());