Pregunta

Parece que debe haber un método removalAllOccuring (Colección) (similar o) en Multiset. Una especie de analógico a eliminar (Object , int) y removeAll (Colección) . A falta de ese método, ¿cuál es la mejor manera de lograr su propósito. Escribí un pequeño controlador JUnit para demostrar:

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

La salida:

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

Estoy pensando que podría haber una manera siempre que me falta, o de una manera distinta y mejor / de bucle sobre la colección que ser eliminado. También tenga en cuenta, que podría fácilmente haber un caso de uso donde la colección que ser eliminado es un List

¿Fue útil?

Solución

No hay nada que lo hará aún. :( Hay un (a Google) solicitud interna característica de este y otros métodos similares (como los métodos estáticos de la clase conjuntos múltiples). Voy a tratar de lograr que se pega en una solicitud de función visible desde el exterior que se puede mantener un ojo en .

EDIT: que no había estado planeando para aceptar otros tipos de colecciones, además de un Multiset como parámetro a estos métodos, sin embargo. Habrá que pensar en eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top