繁体   English   中英

从多集移除集合的出现

[英]removing a collection's occurrences from a Multiset

似乎在Multiset中应该有一个removalAllOccuring(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

目前还没有什么可以做的。 :(关于此方法和其他类似方法(对于Multisets类的静态方法),有一个内部(对Google)功能请求。我将尝试将其粘贴到外部可见的功能请求中,您可以随时注意。

编辑:我没有打算接受除Multiset之外的其他种类的Collections作为此类方法的参数。 将不得不考虑这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM