Cómo comprobar si existe una clave en un mapa

1. Información general

En este breve tutorial, veremos formas de verificar si existe una clave en un mapa .

Específicamente, nos centraremos en containsKey y obtendremos.

2. containsKey

Si echamos un vistazo al JavaDoc para Map # containsKey :

Devuelve verdadero si este mapa contiene un mapeo para la clave especificada

Podemos ver que este método es un buen candidato para hacer lo que queremos.

Creemos un mapa muy simple y verifiquemos su contenido con containsKey :

@Test public void whenKeyIsPresent_thenContainsKeyReturnsTrue() { Map map = Collections.singletonMap("key", "value"); assertTrue(map.containsKey("key")); assertFalse(map.containsKey("missing")); }

En pocas palabras, containsKey nos dice si el mapa contiene esa clave.

3. obtener

Ahora, get a veces también puede funcionar, pero viene con algo de equipaje, dependiendo de si la implementación de Map admite valores nulos o no .

Nuevamente, echando un vistazo al JavaDoc de Map , esta vez para Map # put , vemos que solo arrojará una NullPointerException :

si la clave o valor especificado es nulo y este mapa no permite claves o valores nulos

Dado que algunas implementaciones de Map pueden tener valores nulos (como HashMap ), es posible que get devuelva nulo aunque la clave esté presente.

Entonces, si nuestro objetivo es ver si una clave tiene un valor o no, entonces get funcionará:

@Test public void whenKeyHasNullValue_thenGetStillWorks() { Map map = Collections.singletonMap("nothing", null); assertTrue(map.containsKey("nothing")); assertNull(map.get("nothing")); }

Pero, si solo estamos tratando de verificar que la clave existe, entonces deberíamos seguir con containsKey .

4. Conclusión

En este artículo, analizamos containsKey . También analizamos más de cerca por qué es arriesgado usar get para verificar la existencia de una clave.

Como siempre, consulte los ejemplos de código en Github.