Saltar al contenido

¿Cuál es la mejor manera de iterar dos hashmap en el mismo bucle en Java?

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:

  1. Simplemente compare el contenido de dos mapas

    Guayaba proporciona un Maps.difference() utilidad que te da un MapDifference instancia que le permite inspeccionar exactamente lo que es igual o diferente entre dos mapas.

  2. 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).

  3. 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);
      ...
    }
    
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *