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
Si nous regardonsthe JavaDoc for Map#containsKey:
Renvoie
true
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.