Collections Intermédiaire

Remplacez la recherche et la mutation d'une map en plusieurs étapes par computeIfAbsent(), compute() et merge().

✕ Manual lookup and update
List<String> values = groups.get(key);
if (values == null) {
    values = new ArrayList<>();
    groups.put(key, values);
}
values.add(value);
✓ Java 8+
groups.computeIfAbsent(key, ignored -> new ArrayList<>())
        .add(value);
Un problème avec ce code ? Dites-le nous.

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.

Ancienne Approche
get() + vérification de null + put()
Approche Moderne
computeIfAbsent()
Depuis JDK
8
Difficulté
Intermédiaire
Mises à jour atomiques de maps avec compute et merge
Disponible

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