Atomare Map-Aktualisierungen mit compute und merge
Mehrstufiges Nachschlagen und Ändern von Maps durch computeIfAbsent(), compute() und merge() ersetzen.
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);
Weniger Suchvorgänge
Vermeidet wiederholte Schlüsselzugriffe.
Bessere Nebenläufigkeitssemantik
Nebenläufige Maps können unterstützte Aktualisierungen atomar ausführen.
Klare Absicht
Die Initialisierungsregel steht direkt neben dem Zugriff.
Weitgehend verfügbar seit JDK 8 (März 2014)
Die Berechnungsmethoden von Map vereinen die Absicht von Nachschlagen und Aktualisieren in einer Operation. computeIfAbsent() eignet sich für verzögerte Initialisierung, compute(), wenn der neue Wert vom vorhandenen Wert abhängt, und merge(), um einen übergebenen Wert mit einem bereits in der Map vorhandenen Wert zu kombinieren. Bei nebenläufigen Map-Implementierungen vermeiden unterstützte Berechnungen außerdem Race Conditions, die durch getrennte get()- und put()-Aufrufe entstehen.