eine Sammlung Vorkommen von einem Multiset Entfernen
Frage
Es scheint, wie es sollte eine removalAllOccuring (Sammlung) (oder ähnlich) -Methode in Multiset sein. Eine Art von Analog-zu- entfernen (Object , int) und removeAll (Sammlung) . Kurz diese Methode, was ist der beste Weg, um seine Absicht zu erreichen. Ich schrieb einen kleinen JUnit Fahrer zu zeigen:
/**
* @see http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multiset.html
* @see http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/HashMultiset.html
*/
@Test
public void testBag() {
Multiset<String> bag1 = HashMultiset.create();
bag1.add("a", 2);
bag1.add("b", 3);
bag1.add("c", 3);
logger.debug(bag1);
Multiset<String> bag1Copy = HashMultiset.create(bag1);
Multiset<String> bag2 = ImmutableMultiset.of("a","b","b","b","c","c");
Multiset<String> expected = ImmutableMultiset.of("a","c");
for( String el : bag2.elementSet() ) {
bag1.remove( el, bag2.count(el));
} // end for
Assert.assertEquals(expected, bag1);
bag1Copy.removeAll(bag2);
logger.debug( bag1Copy );
}
Der Ausgang:
[b x 3, c x 3, a x 2]
[]
Ich denke, es könnte eine eine Art und Weise zur Verfügung gestellt sein, dass ich fehle, oder eine andere / bessere Weise als über die Sammlung Schleifen entfernt werden. Beachten Sie auch, dass ich könnte genauso gut einen Anwendungsfall, wo die Sammlung entfernt werden soll, ein List
Lösung
Es gibt nichts, das noch tun wird. :( Es gibt eine interne (Google) Feature-Anfrage über diese und andere ähnliche Verfahren (als statische Methoden für die Multimengen-Klasse). Ich werde versuchen, es in eine von außen sichtbaren Feature-Anfrage eingefügt werden, die Sie im Auge behalten konnten auf .
EDIT: Ich hatte, wenn auch nicht geplant, andere Arten von Sammlungen neben einem Multiset als Parameter auf solche Verfahren zu akzeptieren. Muss darüber nachdenken.