0

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

4

1 に答える 1

2

これを行うものはまだありません。:( これと他の同様のメソッド (Multisets クラスの静的メソッドとして) に関する内部 (Google への) 機能リクエストがあります。外部から見える機能リクエストに貼り付けて、監視できるようにします。 .

編集:ただし、そのようなメソッドのパラメーターとしてマルチセット以外の種類のコレクションを受け入れる予定はありませんでした。それについて考えなければならないでしょう。

于 2010-03-10T21:11:23.443 に答える