2010-01-22 8 views
9

Próbuję mieć Multimt (oparty na hashach) z Multisetem wartości (dla każdego klucza). Patrz przykład:Multimap z HashMultiset dla wartości

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"); 

ale potem,

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

Wygląda więc na to, że nie może uzyskać dostępu do MultiSet stworzyłem? Chciałem móc to zwrócić jako Multiset (w Multisets.unmodifiableMultiset()). Nie chcę za każdym razem kopiować go do nowego Multiset'a. Czy mam jakąkolwiek inną opcję niż przejście z powrotem na Map<K, Multiset<V>> i dodanie w moim kodzie złożoności, która ma na celu wyeliminowanie Multimap?

Odpowiedz

6

Obawiam się, że to nie wydaje się możliwe. Powinieneś złożyć wniosek o funkcję. Mam podejrzenia, że ​​ci sprytni goście z Google mają fajny rodzaj Multimapy, którą mogliby wydać, co może ci pomóc.

+0

No cóż, podejrzewam, że tak, dziękuję. Nie jestem do końca pewien, o jaką funkcję ma się zwrócić (ponieważ zawsze istnieje niebezpieczeństwo, że to się uda :)). PS: jesteś czasami tak skryty! –

+2

Też chciałbym to. Nie ma szans, żeby to się stało przez ostatnie ≳4 lata? –

+1

Niestety, nie, straciliśmy wiarę w konkretne rozwiązanie, które wcześniej wydawało nam się możliwe. –

0

Parametr Multimap interface określa tylko, że get(K) zwraca Collection<V>. Myślę, że to by było kiepskim projektem, aby twój kod był zależny lub zakładał cokolwiek innego.

Czy możesz rozszerzyć nieco więcej o tym, co próbujesz tutaj zrobić? Wydaje się, że powinien istnieć łatwiejszy sposób na osiągnięcie tego.

+4

Krótka wersja pytania brzmi: "Po prostu chcę multimapy, w której widzę wartości za pośrednictwem interfejsu API Multiset, a nie interfejsu API kolekcji". –

Powiązane problemy