Collections Orta

compute ve merge ile atomik map güncellemeleri

Çok adımlı map arama ve değiştirme işlemlerini computeIfAbsent(), compute() ve merge() ile değiştirin.

✕ 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);
Bu kodda bir sorun mu gördünüz? Bize bildirin.
⚡

Daha az arama

Aynı anahtara tekrar tekrar erişmekten kaçınır.

🧵

Daha iyi eşzamanlılık semantiği

Eşzamanlı map'ler desteklenen güncellemeleri atomik olarak gerçekleştirebilir.

👁

Açık amaç

Başlatma kuralı erişimin yanında görünür.

Eski Yaklaşım
get() + null denetimi + put()
Modern Yaklaşım
computeIfAbsent()
JDK'dan itibaren
8
Zorluk
Orta
compute ve merge ile atomik map güncellemeleri
Mevcut

JDK 8'den (Mart 2014) itibaren geniş çapta kullanılabilir

Map hesaplama metotları, arama ve güncelleme amacını tek bir işlemde birleştirir. Tembel başlatma için computeIfAbsent(), yeni değer mevcut değere bağlı olduğunda compute(), sağlanan bir değeri map'te bulunan değerle birleştirmek için merge() kullanın. Eşzamanlı map implementasyonlarında desteklenen hesaplamalar, ayrı get() ve put() çağrılarının yol açtığı yarış durumlarını da önler.