Comment vérifier si une clé existe dans une carte

Comment vérifier si une clé existe dans une carte

1. Vue d'ensemble

Dans ce bref didacticiel, nous examinerons des moyens de vérifier si une clé existe dans unMap.

Plus précisément, nous allons nous concentrer surcontainsKey andget.

2. containsKey

Renvoietrue si cette carte contient un mappage pour la clé spécifiée

Nous pouvons voir que cette méthode est un très bon candidat pour faire ce que nous voulons.

Créons une carte très simple et vérifions son contenu aveccontainsKey:

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

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

En termes simples,containsKey nous indique si la carte contient cette clé.

3. get

Maintenant, le scanget fonctionne parfois aussi, mais il est livré avec des bagages, selon que l'implémentation deMap prend en charge ou non les valeurs nulles.

Encore une fois, en regardant le JavaDoc deMap, cette fois pourMap#put, nous voyons qu'il ne lancera qu'unNullPointerException:

si la clé ou la valeur spécifiée est nulleand this map does not permit null keys or values

Étant donné que certaines implémentations de l'analyseMap ont des valeurs nulles (commeHashMap), il est possible pourget de renvoyernull même si la clé est présente.

Donc, si notre objectif est de voir si une clé a une valeur ou non, alorsget fonctionnera:

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

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

Mais, si nous essayons simplement de vérifier que la clé existe, alors nous devrions nous en tenir àcontainsKey.

4. Conclusion

Dans cet article, nous avons examinécontainsKey. Nous avons également examiné de plus près pourquoi il est risqué d'utiliserget pour vérifier l'existence d'une clé.

Comme toujours, consultez les exemples de codeover on Github.