2013-04-10 15 views
7

Java'da (belki de Guava? kullanarak), iki Collection s arasındaki farkı elde etmek için bazı yöntemler sağlanmıştır, örn. Bir List ve bu Collection s (birini değiştirerek olmadan Setbaşka mekan collection1.removeAll(collection2)?2 koleksiyon arasındaki fark? (toplamadaki öğeler1, ancak koleksiyon2'de değil)

Guava yılında

Sets.difference(set1,set2) vardır, ancak yalnızca değil keyfi koleksiyonları için, Set s için çalışır.

Teşekkür olacağını ! herhangi bir ipucu

+5

münhasır ayrım (simetrik fark) içeren bir Koleksiyonu döndürür disjuction o adında bir yöntemi vardır 've testcollection.removeAll (collection2)' yapmak? – Xaerxess

+1

Açıkçası bu bir çözümdür, ancak koleksiyonumun1 önce kopyalanmadan benim kullanım durumum için bir yöntem olup olmadığını merak ediyorum. –

+0

@ stefan.at.wpf herhangi bir çözüm ya bir kopya yapmak ya da girişi değiştirmek zorunda kalacaktır. –

cevap

13

kullanarak ilk Collection filtre yerleşik Predicate s:

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

Her türlü Collection s ile çalışır, ancak c2Set ise açıkçası daha iyidir.

3

ApacheCommons CollectionUtils sadece basit testCollection `için` collection1` unsurları kopyalamaz Neden

verilen Iterables

+0

Sanırım [substract] (https://commons.apache.org/proper/commons- koleksiyonlar/apidocs/org/apache/commons/collections4/CollectionUtils.html # subtract (java.lang.Iterable,% 20java.lang.Iterable)) burada uygun yöntemdir. – Bax