2010-01-22 3 views
9

각 해시 값에 대해 (해시 기반) Multiset을 사용하여 해시 기반 Multimap을 만들려고합니다. 값에 대한 HashMultiset을 사용하는 멀티 맵

System.out.println(mmap.get("1") instanceof Multiset<?>); 
//false, the returned collection is not a HashMultiset, 
//but a (private) WrappedCollection 

이 그래서 내가 만든 MULTISET에 액세스 할 수없는 것,

Multimap<Object, Object> mmap = Multimaps.newMultimap(
    Maps.<Object, Collection<Object>>newHashMap(), 
    new Supplier<Collection<Object>>() { 
    public Collection<Object> get() { 
    return HashMultiset.create(); 
    } 
}); 
mmap.put("1", "2"); 

그러나 다음 예를 참조하십시오? 나는 이것을 Multiset (Multisets.unmodifiableMultiset()에 싸서)으로 반환 할 수 있기를 원했습니다. 매번 새로운 Multiset으로 복사하고 싶지 않습니다. Map<K, Multiset<V>>으로 다시 전환하고 내 코드에 Multimap이 제거해야하는 복잡성을 추가하는 것 외에 다른 옵션이 있습니까?

답변

6

나는 이것이 가능하지 않을까 두렵다. 기능 요청을 제출해야합니다. 교묘 한 Google 직원이 잠재적으로 도움이 될만한 잠재적 인 Multimap을 가지고 있다는 의심을 가지고 있습니다.

+0

오, 그게 내가 의심했던 것입니다. 어쨌든 고마워요. 나는 정확히 무엇을 요구할 지 확신하지 못한다. (항상 그것을 얻을 위험이 있기 때문에 :)). 추신 : 당신은 너무 비밀 스럽습니다! –

+2

나는 이것을 너무 좋아한다. 지난 4 년 동안 일어날 가능성은 없습니까? –

+1

아아, 아니, 이전에 우리가 공개 할 수 있다고 생각했던 특정 솔루션에 대한 믿음을 잃었습니다. –

0

Multimap interfaceget(K)Collection<V>을 반환하도록 지정합니다. 나는 당신의 코드가 의존하거나 다른 것을 가정하는 것이 좋지 않은 디자인이라고 생각한다.

여기에서하려는 것을 조금 더 확장 할 수 있습니까? 그것을 달성하는 더 쉬운 방법이 있어야하는 것처럼 보입니다.

+4

질문의 짧은 버전은 "컬렉션 API가 아닌 Multiset API를 통해 값을 볼 수있는 멀티 맵이 필요합니다."입니다. –