两个集合的区别是什么?(即在集合1中存在但不在集合2中的元素)

9
在Java中(也许使用Guava?),是否提供了一些方法来获取两个Collection之间的差异,例如一个List和一个Set,而不需要修改其中一个Collection(否则将会使用collection1.removeAll(collection2))?
在Guava中,有Sets.difference(set1,set2),但它仅适用于Set,而不适用于任意集合。
感谢任何提示!

5
为什么不直接将 collection1 的元素复制到 testCollection,然后执行 testCollection.removeAll(collection2) 呢? - Grzegorz Rożniecki
1
显然这是一个解决方案,但我想知道是否已经提供了一些适用于我的用例的方法,而不需要先复制collection1? - stefan.at.kotlin
@stefan.at.wpf 任何可能的解决方案都必须执行复制或修改输入。没有其他方法。 - Sean Patrick Floyd
1
我进行了更正,而不是我主动复制它,所以代码更短,就像一些已经提供的答案一样 :-) - stefan.at.kotlin
2个回答

13
您可以使用内置的Predicate来过滤第一个Collection:
Collections2.filter(c1, Predicates.not(Predicates.in(c2))

它可以与任何类型的Collection一起使用,但显然如果c2是一个Set就更好了。


4

ApacheCommons CollectionUtils有一个名为disjunction的方法

返回包含给定Iterable的排他异或(对称差)的Collection


2
我认为substract是适用于这里的方法。 - Bax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接