Domanda

Sembra che ci dovrebbe essere un removalAllOccuring (Collection) (o simile) il metodo in Multiset. Una sorta di analogico rimuovere (Object , int) e removeAll (Collection) . In mancanza di tale metodo, qual è il modo migliore per realizzare il suo intento. Ho scritto un driver piccola JUnit per dimostrare:

/**
 * @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 );
}

L'output:

[b x 3, c x 3, a x 2]
[]

mi viene da pensare che ci potrebbe essere un modo a condizione che mi manca, o un modo diverso / meglio di loop sulla raccolta da rimuovere. Si noti inoltre, che potrei altrettanto facilmente avere un caso d'uso in cui la raccolta deve essere rimosso è una List

È stato utile?

Soluzione

Non c'è niente che lo farà ancora. :( C'è un interna (a Google) richiesta di funzionalità di questo e di altri metodi simili (come metodi statici per la classe multinsiemi). Cercherò di farlo incollato in una richiesta di funzionalità esternamente visibile che si potrebbe tenere d'occhio .

Modifica che non aveva intenzione di accettare altri tipi di collezioni oltre ad una Multiset come parametro a tali metodi, però. Dovrà pensarci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top