2013-04-10 15 views
7

Javaでは(おそらくGuavaを使用していますか?)2つの違いを得るためにいくつかの方法がありますか? ListこれらCollection S(の1つを変更なしSetは他のためのcollection1.removeAll(collection2)2つのコレクションの違いは? (コレクション1の要素で、コレクション2ではありません)

グアバで

Sets.difference(set1,set2)ありますが、それだけではない、任意のコレクションのために、Set秒間動作します。

おかげで存在することになります!任意のヒント

+5

の排他的論理和(対称差)を含むコレクションを返しますdisjuctionという名前のメソッドを持っています'' testCollection.removeAll(collection2) 'を実行しますか? – Xaerxess

+1

これは明らかに1つの解決策ですが、コレクション1を最初にコピーすることなく、私のユースケースのためのメソッドが既に存在するかどうかは疑問です。 –

+0

@ stefan.at.wpf可能な解決策は、コピーを実行するか入力を変更する必要があります。 –

答えて

13

あなたが使用して最初のCollectionをフィルタリングすることができ、内蔵Predicate S:

Collections2.filter(c1, Predicates.not(Predicates.in(c2)) 

これはどんな種類のCollectionでも動作しますが、c2Setの場合は明らかです。

3

ApacheCommonsのCollectionUtilsは単にtestCollection `に` collection1`要素をコピーしないのはなぜ

が与えられたイテラブル

+0

私は[substract](https://commons.apache.org/proper/commons- collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#subtract(java.lang.Iterable、%20java.lang.Iterable))は、ここで適切なメソッドです。 – Bax

関連する問題