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 une carte .

Plus précisément, nous allons nous concentrer sur containsKey et get.

2. contientKey

Si nous jetons un coup d'œil au JavaDoc pour 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 avec containsKey :

@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. obtenir

Maintenant, get peut parfois fonctionner aussi, mais il est livré avec des bagages, selon que l' implémentation de Map prend en charge ou non les valeurs nulles.

Encore une fois, en jetant un œil au JavaDoc de Map , cette fois pour Map # put , nous voyons qu'il ne lancera qu'une NullPointerException :

si la clé ou la valeur spécifiée est nulle et que cette mappe n'autorise pas les clés ou valeurs nulles

Étant donné que certaines implémentations de Map peuvent avoir des valeurs nulles (comme HashMap ), il est possible pour get de renvoyer null même si la clé est présente.

Donc, si notre objectif est de voir si une clé a une valeur ou non, alors get 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, nous devrions nous en tenir à containsKey .

4. Conclusion

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

Comme toujours, consultez les exemples de code sur Github.