2010-03-10 1 views
0

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

/** 
* @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

ответ

2

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

EDIT:.. я не планировал принимать другие виды коллекций кроме MultiSet в качестве параметра к таким методам, хотя придется думать о том, что