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:
Retorna
true
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.