2012-02-17 31 views
12

將兩個地圖合併到一個Java Java Guava MultiMap中的最佳方式是什麼?將兩個地圖合併爲一個MultiMap

例如:

  • 地圖1包含(1,a)和(2,B)
  • 地圖2含有(2,c)和(3,d)

然後得到的組合多重映射將包含

  • (1,{A}),(2,{b,C}),和(3,{d})

這是我目前的解決方案:

Multimap<T, K> combineMaps(Map<T, K> map1, Map<T, K> map2) { 
    Multimap<T, K> multimap = new MultiMap(); 
    for (final Map.Entry<T, K> entry : map1.entrySet()) { 
     multimap.put(entry.getKey(), entry.getValue()); 
    } 
    for (final Map.Entry<T, K> entry : map2.entrySet()) { 
     multimap.put(entry.getKey(), entry.getValue()); 
    } 
    return multimap; 
} 
+0

那麼,經常沒有最好的方法,你的方式似乎對我來說很明智。你有這個問題嗎?如果不是的話,我會堅持下去(除了我會將泛型添加到'new MultiMap()':))。 – Thomas 2012-02-17 07:01:46

回答

21

...什麼樣的屈德寧的是誰的?他們是來自番石榴還是其他一些圖書館?

番石榴,你可以做

multimap.putAll(Multimaps.forMap(map1)); 
multimap.putAll(Multimaps.forMap(map2)); 
+0

他們確實是番石榴,這就是我一直在尋找的東西。我的谷歌技巧這次似乎讓我失望了。謝謝 – 2012-02-17 07:39:17

1

您的解決方案看起來很好。你可以這樣初始化:

Multimap<T, K> multimap = new MultiMap(map1); 

然後只能遍歷第二個映射,但複雜度/速度是相同的。