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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top