Solución:
Realmente no hay mejor opción que
for (Map.Entry<String, String> entry1 : map1.entrySet() {
String key = entry1.getKey();
String value1 = entry1.getValue();
String value2 = map2.get(key);
// do whatever with value1 and value2
}
Dependiendo de lo que esté intentando hacer exactamente, existen varias opciones razonables:
-
Simplemente compare el contenido de dos mapas
Guayaba proporciona un
Maps.difference()
utilidad que te da unMapDifference
instancia que le permite inspeccionar exactamente lo que es igual o diferente entre dos mapas. -
Iterar sus entradas simultáneamente
Si solo desea iterar sobre las entradas en dos mapas simultáneamente, no es diferente a iterar sobre cualquier otro
Collection
. Esta pregunta entra en más detalles, pero una solución básica se vería así:Preconditions.checkState(map1.size() == map2.size()); Iterator<Entry<String, String>> iter1 = map1.entrySet().iterator(); Iterator<Entry<String, String>> iter2 = map2.entrySet().iterator(); while(iter1.hasNext() || iter2.hasNext()) { Entry<String, String> e1 = iter1.next(); Entry<String, String> e2 = iter2.next(); ... }
Tenga en cuenta que no hay garantía de que estas entradas estén en el mismo orden (y por lo tanto
e1.getKey().equals(e2.getKey())
bien puede ser falso). -
Itera sus claves para emparejar sus valores
Si necesita las claves para alinearse, repita la unión de las claves de ambos mapas:
for(String key : Sets.union(map1.keySet(), map2.keySet()) { // these could be null, if the maps don't share the same keys String value1 = map1.get(key); String value2 = map2.get(key); ... }