代码之家  ›  专栏  ›  技术社区  ›  harschware

从多集中删除集合的引用

  •  0
  • harschware  · 技术社区  · 14 年前

    似乎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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Kevin Bourrillion Gergely    14 年前

    目前还没有什么能做到这一点。:(对于此方法和其他类似方法(作为multisets类的静态方法),有一个内部(对Google)功能请求。我将尝试把它粘贴到一个外部可见的特性请求中,您可以密切关注它。

    编辑: 不过,除了多集之外,我还没有打算接受其他类型的集合作为此类方法的参数。我得考虑一下。