2011-12-04 19 views
26

CollectionUtils::removeAll() Commons Collections 3.2.1Java Commons Koleksiyonları removeAll

ne dokümanlar devletin tersini yapıyor bu yöntem gibi görünüyor çünkü ben deliriyorum olmalı

:

Removes the elements in remove from collection. That is, this method returns a collection containing all the elements in c that are not in remove.

Bu küçük JUnit test

@Test 
public void testCommonsRemoveAll() throws Exception { 
    String str1 = "foo"; 
    String str2 = "bar"; 
    String str3 = "qux"; 

    List<String> collection = Arrays.asList(str1, str2, str3); 
    System.out.println("collection: " + collection); 

    List<String> remove = Arrays.asList(str1); 
    System.out.println("remove: " + remove); 

    Collection result = CollectionUtils.removeAll(collection, remove); 
    System.out.println("result: " + result); 
    assertEquals(2, result.size()); 
} 

java.lang.AssertionError: expected:<2> but was:<1>

Ben [bar, qux] beklemeliyim dokümanlar benim okuma itibaren

ve baskılar

collection: [foo, bar, qux] 
remove: [foo] 
result: [foo] 

. Neyi özledim?

+0

Birisi bana bunu hatırlattığından beri bunu yansıtmak için gönderiyi güncelledim - ancak Apache Commons Collections 4.0, bu sorun için bir düzeltme ile Kasım 2013'te yayımlandı. – birryree

cevap

34

Düzenleme 1 Ocak 2014 Apache Commons Collections 4.0, 21 Kasım 2013'te nihayet yayımlandı ve bu sorun için bir düzeltme içeriyor. Söz (1688 - 1691) içinde

Link to CollectionUtils.java

Hatları yöntemi daha önce kırılmış bildirim ile:

/* 
... 
* @since 4.0 (method existed in 3.2 but was completely broken) 
*/ 
public static <E> Collection<E> removeAll(final Collection<E> collection, final Collection<?> remove) { 
    return ListUtils.removeAll(collection, remove); 
} 

Orijinal Cevap

Hayır, değilsin çılgın. removeAll() aslında (yanlış) retainAll() numaralı telefonu arıyor.

Bu

sürüm 3.2 etkileyen CollectionUtils bir hata vardır. Sadece 4.0 şubesinde düzeltildi.

https://issues.apache.org/jira/browse/COLLECTIONS-349

Ve başka kanıtı, burada kaynak koduna bir bağlantı:

http://svn.apache.org/repos/asf/commons/proper/collections/tags/COLLECTIONS_3_2/src/java/org/apache/commons/collections/CollectionUtils.java

Kontrol dışarı bu satırı:

public static Collection removeAll(Collection collection, Collection remove) { 
    return ListUtils.retainAll(collection, remove); 
} 

Evet ... kırık!

+1

Kutsal dumanlar! Bu çatlaklardan nasıl geçti? Bilgi için teşekkürler. Kabul et ve kabul et. – markdsievers

+0

@markdsievers - Ünite testlerine ihtiyaç var, ya da tamir gerekiyor! – birryree

+0

IMO, bu oldukça zayıf. Hatalar tamam, ancak asıl konu "02/Aug/06 17:37" nin bir yaratma damgasını taşıyor ve STILL buradaki düzeltmeyle bir yapım sürümü yayınlamadı. –

İlgili konular