Comment incrémenter la valeur de Map sur une ligne en Java

Comment écrire (Java 8 ou version ultérieure)

Comment écrire


map.merge(key, 1, Integer::sum);

Essayez de bouger

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

Pourquoi?

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

Documentation Oracle

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.

Documentation Oracle

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());

En d'autres termes?

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.

référence

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

Comment incrémenter la valeur de Map sur une ligne en Java
[Java] Comment obtenir la valeur maximale de HashMap
Comment dériver le dernier jour du mois en Java
[Java] Comment obtenir la clé et la valeur stockées dans Map par traitement itératif
Comment obtenir la date avec Java
Comment obtenir la longueur d'un fichier audio avec Java
Comment trouver le nombre total de pages lors de la pagination en Java
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Comment créer votre propre annotation en Java et obtenir la valeur
[Java] Comment obtenir l'URL de la source de transition
[Java] Comment utiliser Map
Comment utiliser Java Map
Résumé de la mise en œuvre des arguments par défaut en Java
Branchement conditionnel du résultat de l'instruction SQL pour n'en rechercher qu'une seule en Java
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Comment obtenir le nom d'une classe / méthode exécutée en Java
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Comment modifier la valeur de réglage de Springboot Hikari CP
Comment changer Java à l'ère d'OpenJDK sur Mac
Comment apprendre JAVA en 7 jours
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Comment concaténer des chaînes avec Java
Comment spécifier un tableau pour la valeur de retour / l'argument d'une méthode dans le fichier IDL CORBA
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Comprendre comment la programmation fonctionnelle a été introduite dans Java d'un seul coup
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment écrire Ruby en une seule ligne Résumé par débutant
Fixez le nom du fichier de guerre à celui défini dans Maven
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Obtenez le résultat de POST en Java
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
[Java] Comment utiliser la classe File
Référence Java à comprendre dans la figure
[java] Résumé de la gestion des caractères
[Rails] Comment utiliser la méthode de la carte
Inverser la clé de la valeur dans la carte Java
Comment faire une conversion de base en Java
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
Comment déterminer le nombre de parallèles
[Java] Comment régler la date sur 00:00:00
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
[Java] Comment obtenir le répertoire actuel
Comment appliquer les conventions de codage en Java
Comment intégrer Janus Graph dans Java
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Traitement × Java] Comment utiliser la classe