удаление вхождений коллекции из мультинабора

StackOverflow https://stackoverflow.com/questions/2419144

  •  19-09-2019
  •  | 
  •  

Вопрос

Кажется, в Multiset должен быть метод удаленияAllOccuring(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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top