Comment écrire
map.merge(key, 1, Integer::sum);
Illustrative
jshell> Map<String, Integer> map = new HashMap<>();
map ==> {}
jshell> map.put("apple", 0);
$2 ==> null
jshell> map.get("apple");
$3 ==> 0
jshell> map.merge("apple", 1, Integer::sum);
$4 ==> 1
jshell> map.get("apple");
$5 ==> 1
jshell> map.merge("apple", 1, Integer::sum);
$6 ==> 2
jshell> map.get("apple");
$7 ==> 2
Examinons la méthode sum de Integer et la méthode de fusion de Map
Integer.sum
Il s'agit simplement d'ajouter les deux arguments.
sum public static int sum(int a, int b) Ajoute deux entiers, comme l'opérateur +. Paramètres: a --Premier opérande b --Deuxième opérande Valeur de retour: somme de a et b Version introduite: 1.8
Map.merge
default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) Si la clé spécifiée n'est pas encore associée ou associée à une valeur, elle sera associée à la valeur non nulle spécifiée. Sinon, il remplace la valeur appropriée par le résultat de la fonction de remappage spécifiée et la supprime si le résultat est nul.
En d'autres termes, le deuxième argument «valeur» est la valeur par défaut lorsqu'il est nul, et s'il n'est pas nul, le résultat de la fonction du troisième argument est défini.
La fonction avec le troisième argument prend également deux arguments. Le premier argument de la fonction du troisième argument est la valeur de la clé. Le deuxième argument de la fonction du troisième argument est la valeur lorsque la même valeur que le deuxième argument est nulle.
[Java] Map # merge est difficile à comprendre.
Est-ce comme ça lorsque vous donnez un nom à une variable?
map.merge(key, defaultValue, (value, defaultValue) -> function());
map.merge (key, 1, Integer :: sum)
traite la valeur par défaut comme une étape (le nombre ajouté dans un processus), et ajoute la valeur et la valeur par défaut à la somme de Integer avec une référence de méthode. Je suis.
https://stackoverflow.com/questions/81346/most-efficient-way-to-increment-a-map-value-in-java
Aussi, quand j'ai lu "Effective Java 3rd Edition", cette méthode d'écriture a également été mentionnée dans le point 43 Choisir une référence de méthode sur lambda (P199).
Recommended Posts