Java-Commons-Collections removeAll
CollectionUtils::removeAll() Commons-Collections 3.2.1
Ich muss verrückt werden, weil es scheint, wie diese Methode macht das umgekehrte von dem, was die docs Status:
Entfernt die Elemente aus Sammlung entfernen. Das heißt, diese Methode liefert eine collection, die alle Elemente in c, die nicht entfernen.
Diesem kleinen 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());
}
Scheitert mit
java.lang.AssertionError: expected:<2> aber war:<1>
und druckt
collection: [foo, bar, qux]
remove: [foo]
result: [foo]
Aus meiner Lektüre der Dokumente sollte ich erwarten, dass [bar, qux]
. Was habe ich verpasst?
- Ich habe meinen Beitrag aktualisiert, um diese zu reflektieren, da jemand mich daran erinnert - aber Apache Commons Collections 4.0 war veröffentlicht im November 2013, mit einem fix für dieses Problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten 1. Januar 2014 Apache Commons Collections 4.0 wurde endlich veröffentlicht am November 21, 2013, und enthält ein fix für dieses Problem.
Link zu
CollectionUtils.java
Linien in Frage (1688 - 1691), mit der Anerkennung der Methode war zuvor gebrochen:
Ursprüngliche Antwort
NÖ, du bist nicht verrückt.
removeAll()
ist eigentlich (falsch) aufrufenretainAll()
.Dies ist ein Fehler in
CollectionUtils
beeinflussen version 3.2. Es ' s wurde behoben, sondern nur in den 4.0-Zweig.https://issues.apache.org/jira/browse/COLLECTIONS-349
Und als weiterer Beweis, hier ist ein link zu der source-code:
http://svn.apache.org/repos/asf/commons/proper/collections/tags/COLLECTIONS_3_2/src/java/org/apache/commons/collections/CollectionUtils.java
Schauen Sie sich diese Zeile:
Yep...gebrochen!