Est-ce que Java a quelque chose comme
map.putIfValueNotNull(key, value)
Je ne peux donc mettre de la valeur dans la carte que si elle n’est pas nulle sans vérification explicite.
Je sais que org.Apache.commons.collections4.MapUtils
contient la méthode safeAddToMap()
, mais si value
est null
, il ajoute empty string
qui n'est pas ce que vous voulez.
Je n'aime pas la variante, pour remplacer HashMap
pour implémenter une nouvelle méthode, car dans ce cas, vous ne l'avez pas pour d'autres implémentations: TreeMap
ou LinkedHashMap
ou autre.
Je ne sais pas si cette fonction existe dans une bibliothèque disponible, telle que Apache
ou similaire.
Par conséquent, dans mes projets, je dois l'implémenter moi-même:
public static <K, V> Map<K, V> addNotNull(Map<K, V> map, K key, V value) {
if(value != null)
map.put(key, value);
return map;
}
Vous pouvez utiliser la fonction computeIfAbsent()
qui vérifie si la clé est déjà dans la carte, si elle y est, elle ne fait rien. Si la clé n'est pas présente, elle vérifie si la valeur calculée est nulle et la met dans la carte si elle ne l'est pas.
map.computeIfAbsent(key, val -> value);
Attention, putIfAbsnet
insère des valeurs nulles dans la carte.
J'ai essayé ce qui suit et cela semble fonctionner.
Map<String, String> map = new HashMap<>();
String object1 = "blah";
String object2 = null;
map.compute("key1", (k, v) -> object1);
map.compute("key2", (k, v) -> object2);
System.out.println(map);
Je ne sais pas s'il existe des considérations de performance ou autres qui rendraient cette façon indésirable. Cela me semble plutôt propre. Si object1
ou object2
est null, ils ne se retrouvent pas dans la carte. Lorsque je lance ceci, j'obtiens le résultat suivant.
{key1=blah}
Notez que si une valeur avec la même clé est déjà dans la carte, elle sera remplacée.
Selon Java documentation , si la clé spécifiée n’est pas déjà associée à une valeur (ou si elle est mappée à null), tente de calculer sa valeur à l’aide de la fonction de mappage donnée et l’entre dans cette mappe sauf si la valeur est null.
Un exemple simple à mettre:
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("1", "ONE");
map.put("2", null);
map.computeIfAbsent("3", val -> "THREE");
map.computeIfAbsent("4", val -> null);
System.out.println(map);
}
La sortie de ceci serait -
{1=ONE, 2=null, 3=THREE}
Il est clair que la sortie ne contient pas les valeurs NULL si elles ont été ajoutées via la méthode computeIfAbsent, alors qu'elles sont présentes si elles ont été ajoutées par la méthode put normale.