Collections Średniozaawansowany

Atomowe aktualizacje map za pomocą compute i merge

Zastąp wieloetapowe wyszukiwanie i modyfikowanie mapy metodami computeIfAbsent(), compute() i 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);
Widzisz problem z tym kodem? Daj nam znać.
⚡

Mniej wyszukiwań

Eliminuje wielokrotny dostęp do tego samego klucza.

🧵

Lepsza semantyka współbieżności

Mapy współbieżne mogą atomowo wykonywać obsługiwane aktualizacje.

👁

Jasny zamiar

Reguła inicjalizacji znajduje się bezpośrednio przy operacji dostępu.

Stare podejście
get() + sprawdzenie null + put()
Nowoczesne podejście
computeIfAbsent()
Od JDK
8
Poziom trudności
Średniozaawansowany
Atomowe aktualizacje map za pomocą compute i merge
Dostępne

Szeroko dostępne od JDK 8 (marzec 2014)

Metody obliczeniowe Map łączą zamiar wyszukania i aktualizacji w jednej operacji. Używaj computeIfAbsent() do leniwej inicjalizacji, compute(), gdy nowa wartość zależy od istniejącej, a merge() do połączenia dostarczonej wartości z wartością obecną już w mapie. W implementacjach map współbieżnych obsługiwane obliczenia zapobiegają też wyścigom powodowanym przez osobne wywołania get() i put().