Aggiornamenti atomici delle mappe con compute e merge
Sostituisci la ricerca e la mutazione della mappa in più passaggi con computeIfAbsent(), compute() e 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);
Meno ricerche
Evita accessi ripetuti alla chiave.
Migliore semantica di concorrenza
Le mappe concorrenti possono eseguire atomicamente gli aggiornamenti supportati.
Intento chiaro
La regola di inizializzazione appare accanto all'accesso.
Ampiamente disponibile dal JDK 8 (marzo 2014)
I metodi di calcolo di Map combinano l'intento di ricerca e aggiornamento in una sola operazione. Usa computeIfAbsent() per l'inizializzazione lazy, compute() quando il nuovo valore dipende da quello esistente e merge() per combinare un valore fornito con uno già presente nella mappa. Nelle implementazioni di mappe concorrenti, i calcoli supportati evitano anche le race condition causate da chiamate separate a get() e put().