Java: cómo obtener claves y valores de un mapa

En este tutorial, repasaremos ejemplos sobre cómo obtener las claves y los valores (entradas) de un mapa en Java. Usaremos forEach así como iteradores.

Introducción

Los almacenes de clave-valor son esenciales y se usan con frecuencia, especialmente en operaciones que requieren búsquedas rápidas y frecuentes. Permiten que un objeto, la clave, se asigne a otro objeto, el valor. De esta forma, los valores se pueden recuperar fácilmente buscando la clave.

En Java, la implementación Map más popular es la clase HashMap. Aparte del mapeo de clave-valor, se usa en código que requiere inserciones, actualizaciones y búsquedas frecuentes. El tiempo de inserción y búsqueda es una constante O(1).

En este tutorial, repasaremos cómo obtener las claves y los valores de un mapa en Java.

Obtener claves y valores (entradas) de Java Map

La mayoría de las veces, está almacenando pares clave-valor porque ambas piezas de información son importantes. Por lo tanto, en la mayoría de los casos, querrá reunir el par clave-valor.

El método entrySet() devuelve un conjunto de objetos Map.Entry<K, V> que residen en el mapa. Puede iterar fácilmente sobre este conjunto para obtener las claves y sus valores asociados de un mapa.

Rellenemos un HashMap con algunos valores:

1
2
3
4
5
6
Map<String, Integer> map =  new HashMap<>();
        
map.put("David", 24);
map.put("John", 35);
map.put("Jane", 19);
map.put("Billy", 21);

Ahora, iteremos sobre este mapa, revisando cada Map.Entry<K,V> en entrySet(), y extrayendo la clave y el valor de cada una de esas entradas:

1
2
3
for (Map.Entry<String, Integer> pair : map.entrySet()) {
    System.out.println(String.format("Key (name) is: %s, Value (age) is : %s", pair.getKey(), pair.getValue()));   
}

Esto resulta en:

1
2
3
4
Key (name) is: Billy, Value (age) is: 21
Key (name) is: David, Value (age) is: 24
Key (name) is: John, Value (age) is: 35
Key (name) is: Jane, Value (age) is: 19

Obtener claves y valores (entradas) de Java Map con forEach()

Java 8 nos presenta el método forEach() para colecciones. Acepta un BiConsumer<? súper K, ? súper V> acción. El método forEach() realiza la acción dada BiConsumer en cada entrada del HashMap.

Usemos el mismo mapa de antes, pero esta vez, agregue un año a cada una de las edades de las entradas:

1
map.forEach((key, value) -> System.out.println(key + " : " + value));

Esto imprime:

1
2
3
4
Billy : 21
David : 24
John : 35
Jane : 19

O, en lugar de consumir cada clave y valor del mapa, puede usar un Consumidor regular y simplemente consumir entradas completas del entrySet():

1
2
map.entrySet()
    .forEach((entry) -> System.out.println(entry.getKey() + " : " + entry.getValue()));

Esto también resulta en:

1
2
3
4
Billy : 21
David : 24
John : 35
Jane : 19

Obtener claves de un mapa de Java

Para recuperar solo claves, si realmente no necesita ninguna información de los valores, en lugar del conjunto de entradas, puede obtener el conjunto de claves:

1
2
3
for(String key: map.keySet()){
    System.out.println(key);
}

Producción:

1
2
3
4
Billy
David
John
Jane

Obtener valores de un mapa de Java

De manera similar, uno puede desear recuperar e iterar solo los valores, sin las claves. Para esto, podemos usar values():

1
2
3
for(String value: map.values()){
    System.out.println(value);
}

Producción:

1
2
3
4
21
54
35
19

Comprobar si el mapa contiene una clave

La clase HashMap tiene un método containsKey(), que comprueba si la clave pasada existe en el HashMap y devuelve un valor booleano que indica la presencia o ausencia del elemento.

Comprobemos si existe una clave, 5:

1
2
boolean result = map.containsKey(5);
System.out.println(result);

Esto imprime:

1
false

Y para una clave existente:

1
2
boolean result = map.containsKey("John");
System.out.println(result);

Esto imprime:

1
true

Conclusión

En este artículo, hemos repasado algunas formas de obtener claves y valores (entradas) de un mapa en Java. Hemos cubierto el uso de un iterador y revisando cada Map.Entry<K, V>, así como el uso de un método forEach() tanto en el mapa en sí como en su conjunto de entradas.

Finalmente, hemos repasado cómo obtener el conjunto de claves y los valores por separado, y verificamos si un mapa contiene una clave determinada.

Licensed under CC BY-NC-SA 4.0