2012-02-17 24 views
12

¿Cuál es la mejor manera de combinar dos mapas en un solo Guava MultiMap en Java?Combinar dos mapas en un MultiMap

Por ejemplo:

  • Mapa 1 contiene (1, a) y (2, b)
  • Map2 contiene (2, c) y (3, d)

Entonces el resultante multimap combinado contendría

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

Ésta es mi solución actual:

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

Bueno, a menudo no hay la mejor manera y su camino me parece sensato. ¿Tienes algún problema con esto? Si no, me quedaría con eso (excepto que agregaría los genéricos a 'nuevo MultiMap()' también :)). – Thomas

Respuesta

21

... ¿Qué tipo de Multimapas son éstos? ¿Son de Guava, o de alguna otra biblioteca?

En guayaba, que podría hacer

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

Son de hecho guayaba y esto es lo que estaba buscando. Mis habilidades de google parecen haberme fallado esta vez. Gracias –

1

Su solución parece estar bien. Puede inicializar de esta manera:

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

y luego solo recorrer el segundo mapa, sin embargo, la complejidad/velocidad es la misma.