удаление экземпляров коллекции из мультисети - PullRequest
0 голосов
/ 10 марта 2010

Похоже, в Multiset должен быть метод removeAllOccuring (Collection) (или похожий). Этакий аналог remove (Object, int) и removeAll (Collection) . Если не считать этого метода, каков наилучший способ достичь своей цели. Я написал небольшой драйвер JUnit для демонстрации:

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

Выход:

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

Я думаю, что может быть какой-то способ при условии, что я пропускаю, или другой / лучший способ, чем перебирать коллекцию для удаления. Также обратите внимание, что я мог бы также легко использовать случай, когда удаляемая коллекция представляет собой List

1 Ответ

2 голосов
/ 11 марта 2010

Нет ничего, что сделает это еще. :( Существует внутренний (для Google) запрос функции об этом и других похожих методах (как статические методы для класса Multisets). Я постараюсь вставить его во внешне видимый запрос функции, за которым вы могли бы следить .

РЕДАКТИРОВАТЬ: Хотя я не планировал принимать другие виды коллекций, кроме Multiset, в качестве параметра для таких методов. Надо будет подумать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...