Cómo inicializar un Map en Java

En Java, un HashMap es una estructura de datos que permite almacenar items en forma de pares clave/valor. En un item, clave y valor pueden ser de mismo o distinto tipo. A continuación repasaremos algunas formas de inicializar un Map en Java.

Instanciación y carga de ítems

En el siguiente ejemplo

  • Se instancia el Map con el constructor por defecto, utilizando tipos parametrizados para especificar los tipos para clave/valor.
  • Se inicializa cada ítem del Map haciendo uso del método put(key, value).
  • Se itera a través de los ítems del Map para mostrar cada par clave/valor por consola. Para hacer esto utilizamos el método keySet() para obtener un Set con las keys de los ítems contenidos en el Map.
import java.util.HashMap;
import java.util.Map;

public class InicializarMapEjemplo3 {

	public static void main(String[] args) {
		Map<Integer, String> map = new HashMap<Integer, String>();
		map.put(1, "Mar");
		map.put(2, "Lago");
		map.put(3, "Rio");
		map.put(4, "Arroyo");

		for (Integer k : map.keySet()) {
			System.out.println("-> key: " + k + " - value: " + map.get(k));
		}
	}

}

Salida:

-> key: 1 - value: Mar
-> key: 2 - value: Lago
-> key: 3 - value: Rio
-> key: 4 - value: Arroyo

Inicializar un Map en Java 8

Si estamos trabajando con Java 8 podemos hacer uso de las facilidades provistas por Stream API.

En este ejemplo:

  • Usamos el método Stream.of(T… values) para generar un stream a partir del cual crearemos el Map.
  • Agregamos los ítems creando para cada uno, una nueva instancia de la clase AbstractMap.SimpleEntry.
  • Generamos el Map utilizando Collectors.toMap(keyMapper, valueMapper).
import java.util.AbstractMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class InicializarMapEjemplo4 {

	public static void main(String[] args) {
		Map<Integer, String> map = Stream.of(
				new AbstractMap.SimpleEntry<Integer, String>(1, "Mar"), 
				new AbstractMap.SimpleEntry<Integer, String>(2, "Lago"),
				new AbstractMap.SimpleEntry<Integer, String>(3, "Rio"),
				new AbstractMap.SimpleEntry<Integer, String>(4, "Arroyo")
			).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

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

}

Salida:

-> key: 1 - value: Mar
-> key: 2 - value: Lago
-> key: 3 - value: Rio
-> key: 4 - value: Arroyo

En el siguiente ejemplo usamos nuevamente la Stream API pero esta vez generamos el stream de un array de dos dimensiones, representando cada posición un ítem en el Map que vamos a generar. En este caso tenemos la limitación de que tanto la clave como el valor de cada ítem son del mismo tipo.

import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class InicializarMapEjemplo5 {

	public static void main(String[] args) {

		Map<Integer, String> map =
				Stream.of(new Object[][] {
					{1, "Mar"}, 
					{2, "Lago"}, 
					{3, "Rio"},
					{4, "Arroyo"}
				}).collect(Collectors.toMap(a -> (Integer)a[0], a -> (String)a[1]));
		
		map.forEach((k, v) -> System.out.println("-> key: " + k + " - value: " + v));
	}

}

Salida:

-> key: 1 - value: Mar
-> key: 2 - value: Lago
-> key: 3 - value: Rio
-> key: 4 - value: Arroyo

Conclusión

Hay varias formas de inicializar un HashMap en Java, pero dos formas comunes son a través del constructor y a través de Stream API. Inicializar un HashMap usando Stream API proporciona una forma más concisa y legible de inicializar un HashMap, especialmente cuando se trata de una gran cantidad de elementos. La elección de qué método usar depende de su caso de uso específico y su preferencia personal. Al comprender las diferentes formas de inicializar un HashMap, puede tomar mejores decisiones y escribir código más eficiente.


Te puede interesar:

Palabras reservadas en Java

Las palabras reservadas en Java son un componente crucial de la sintaxis del lenguaje para formar los bloques básicos del lenguaje.

Seguir leyendo →