removendo as ocorrências de uma cobrança de uma Multiset
Pergunta
Parece que deve haver um método removalAllOccuring (Collection) (semelhante ou) em Multiset. Um tipo de análogo ao remover (Object , int) e removeAll (Collection) . Curto desse método, qual é a melhor maneira de realizar seu intento. Eu escrevi um pequeno driver JUnit para demonstrar:
/**
* @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 );
}
A saída:
[b x 3, c x 3, a x 2]
[]
Estou pensando que pode haver uma maneira desde que estou em falta, ou uma maneira diferente / melhor do que um loop sobre a coleção para ser removido. Também nota, que eu poderia facilmente ter um caso de uso onde a coleção a ser removido é um List
Solução
Não há nada que vai fazer isso ainda. :( Há um (a Google) pedido de recurso interno sobre este e outros métodos semelhantes (como métodos estáticos para a classe multisets). Vou tentar obtê-lo colado em um pedido de recurso externamente visível que você pode manter um olho em .
EDIT: eu não tinha sido planejamento para aceitar outros tipos de coleções, além de uma Multiset como parâmetro para tais métodos, no entanto. Terá que pensar sobre isso.