문제

멀티 세트에 제거 (수집) (또는 비슷한) 메소드가 있어야합니다. 일종의 아날로그 제거 (Object, int) 그리고 removeall (컬렉션). 그 방법에 미치지 못하면 의도를 달성하는 가장 좋은 방법은 무엇입니까? 나는 작은 주니 드라이버를 썼다 :

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

도움이 되었습니까?

해결책

아직 이것을 할 일이 없습니다. :(이 기능 및 기타 유사한 방법에 대한 내부 (Google to Google) 기능 요청이 있습니다 (Multisets 클래스의 정적 메소드). .

편집하다: 그러나 나는 그 방법의 매개 변수로서 멀티 세트 외에 다른 종류의 컬렉션을 받아 들일 계획이 없었습니다. 그것에 대해 생각해야 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top