Como verificar se uma chave existe em um mapa

Como verificar se uma chave existe em um mapa

1. Visão geral

Neste breve tutorial, veremos maneiras de verificar se existe uma chave emMap.

Especificamente, vamos nos concentrar emcontainsKey areiaget.

2. containsKey

Se dermos uma olhada emthe JavaDoc for Map#containsKey:

Retornatrue se este mapa contém um mapeamento para a chave especificada

Podemos ver que esse método é um bom candidato para fazer o que queremos.

Vamos criar um mapa muito simples e verificar seu conteúdo comcontainsKey:

@Test
public void whenKeyIsPresent_thenContainsKeyReturnsTrue() {
    Map map = Collections.singletonMap("key", "value");

    assertTrue(map.containsKey("key"));
    assertFalse(map.containsKey("missing"));
}

Simplificando,containsKey nos mostra se o mapa contém essa chave.

3. get

Agora,get can às vezes funciona também, mas vem com alguma bagagem, dependendo se a implementaçãoMap suporta ou não valores nulos.

Novamente, dando uma olhada no JavaDoc deMap, desta vez paraMap#put, vemos que ele lançará apenas umNullPointerException:

se a chave ou valor especificado for nuloand this map does not permit null keys or values

Como algumas implementações deMap can têm valores nulos (comoHashMap), é possível queget retornenull mesmo que a chave esteja presente.

Portanto, se nosso objetivo é ver se uma chave tem um valor ou não,get funcionará:

@Test
public void whenKeyHasNullValue_thenGetStillWorks() {
    Map map = Collections.singletonMap("nothing", null);

    assertTrue(map.containsKey("nothing"));
    assertNull(map.get("nothing"));
}

Mas, se estamos apenas tentando verificar se a chave existe, devemos ficar comcontainsKey.

4. Conclusão

Neste artigo, examinamoscontainsKey. Também examinamos mais de perto por que é arriscado usarget para verificar a existência de uma chave.

Como sempre, verifique os exemplos de códigoover on Github.