Mises à jour atomiques de maps avec compute et merge
Remplacez la recherche et la mutation d'une map en plusieurs étapes par computeIfAbsent(), compute() et merge().
List<String> values = groups.get(key);
if (values == null) {
values = new ArrayList<>();
groups.put(key, values);
}
values.add(value);
groups.computeIfAbsent(key, ignored -> new ArrayList<>())
.add(value);
Moins de recherches
Évite les accès répétés à la clé.
Meilleure sémantique de concurrence
Les maps concurrentes peuvent effectuer atomiquement les mises à jour prises en charge.
Intention claire
La règle d'initialisation apparaît à côté de l'accès.
Largement disponible depuis JDK 8 (mars 2014)
Les méthodes de calcul de Map réunissent l'intention de recherche et de mise à jour en une seule opération. Utilisez computeIfAbsent() pour l'initialisation paresseuse, compute() lorsque la nouvelle valeur dépend de la valeur existante, et merge() pour combiner une valeur fournie avec celle déjà présente dans la map. Sur les implémentations de maps concurrentes, les calculs pris en charge évitent aussi les conditions de concurrence causées par des appels séparés à get() et put().