假设我想计算 2 个集合 set1
和 set2
的并集,并将结果分配给 set3
。我不想更改 set1
和 set2
的值。
我知道我可以这样做:
Set<String> set1 = new HashSet<String>(); set1.add("a");
Set<String> set2 = new HashSet<String>(); set2.add("b");
Set<String> set3 = new HashSet<String>(set1); // copy constructor
set3.addAll(set2);
但我想知道是否有更直接的语法,例如:
Set<String> set3 = (new HashSet<String>(set1)).addAll(set2);
或
Set<String> set3 = new HashSet<String>();
set3.addAll(set1).addAll(set2);
我尝试过的方法不起作用,因为 addAll()
返回一个 boolean 值,而不是结果集对象。
最佳答案
目前还不完全清楚您的标准是什么,但这里有一个替代方案:
Set<String> set3 = Stream.concat(set1.stream(), set2.stream())
.collect(Collectors.toSet());
如果你使用的是 Guava,你也可以这样做:
Set<String> set3 = Sets.union(set1, set2);
请注意,这实际上返回了一个 View 。对基础集合的后续修改将反射(reflect)在 set3
中。如果你想要一个不可变的副本,你可以使用ImmutableSet
:
Set<String> set3 = new ImmutableSet.Builder<String>()
.addAll(set1)
.addAll(set2)
.build();
关于java - 直接赋值 `set1.addAll(set2)`的结果Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50400860/