2012-02-17 14 views
12

Qual è il modo migliore per combinare due mappe in un singolo Guava MultiMap in Java?Combina due mappe in una MultiMap

Ad esempio:

  • Map1 contiene (1, a) e (2, b)
  • Map2 contiene (2, c) e (3, d)

Poi la risultante multimap combinato conterrebbe

  • (1, {a}), (2, {b, c}), e (3, {d})

Questa è la mia soluzione attuale:

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

Beh, spesso non c'è la via migliore e la tua strada mi sembra sensata. Hai qualche problema con questo? In caso contrario, mi limiterei a seguirlo (tranne che aggiungerei i generici a 'newMultiMap()' too :)). – Thomas

risposta

21

... Che tipo di multimaps sono? Sono di Guava o di qualche altra biblioteca?

In Guava, si potrebbe fare

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

Sono davvero Guava e questo è quello che stavo cercando. Le mie competenze su Google sembrano aver fallito questa volta. Grazie –

1

La vostra soluzione sembra a posto. È possibile inizializzare in questo modo:

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

e quindi solo scorrere la seconda mappa, tuttavia la complessità/velocità è la stessa.