2010-03-10 51 views
0

似乎應該在Multiset中刪除AllAccount(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] 
[] 

我想有可能是AA的方式提供了我的思念,或大於循環不同的/更好的辦法在集合上被刪除。另外請注意,我可以很容易地有一個用例,其中要刪除的集合是List

回答

2

沒有什麼可以做到這一點。 :(有關於這個和其他類似方法的內部(針對Google)功能請求(作爲Multisets類的靜態方法)我會嘗試將它粘貼到可以留意的外部可見功能請求中。

編輯:。我還沒有打算接受其他類型的集合,除了多集作爲參數傳遞給這樣的方法,但將不得不考慮有關