2010-01-22 53 views
9

我試圖讓一個(基於散列)Multimap與基於(基於散列的)Multiset的每個鍵的值。見例如:Multimap與值HashMultiset的值

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

但隨後,

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

因此,似乎我無法訪問我創建了多集?我希望能夠作爲一個Multiset返回(包含在Multisets.unmodifiableMultiset()中)。我不想每次都將它複製到新的Multiset中。除了切換回Map<K, Multiset<V>>並在我的代碼中添加Multimap意味着要消除的複雜性之外,還有其他選擇嗎?

回答

6

恐怕這似乎不可能。您應該提交功能請求。我懷疑那些狡猾的谷歌人有一種漂亮的Multimap,他們可能會發布可能會幫助你的Multimap。

+0

噢,那就是我所懷疑的,無論如何。我不確定要問什麼功能(因爲總是有獲得它的危險:))。 PS:你有時非常隱祕! – 2010-01-23 00:42:02

+2

我也想這樣。在過去的4年裏沒有發生過這種事情嗎? – 2014-07-11 19:00:40

+1

唉,不,我們已經失去了我們以前認爲我們可能發佈的特定解決方案的信心。 – 2014-11-02 16:42:14

0

Multimap interface僅指定get(K)返回Collection<V>。我認爲這將是糟糕的設計,你的代碼依賴或假設其他任何東西。

你可以擴展一點你在這裏試圖做什麼?似乎應該有一個更簡單的方法來實現它。

+4

問題的簡短版本是:「我只想要一個multimap,我可以通過Multiset API看到值,而不是Collection API」。 – 2010-01-22 18:55:23