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.
Kod Karşılaştırması
✕ 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.
Modern yöntem neden daha iyi
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
JDK Desteği
compute ve merge ile atomik map güncellemeleri
Mevcut
JDK 8'den (Mart 2014) itibaren geniş çapta kullanılabilir
Nasıl çalışır
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.
İlgili Belgeler
Kanıt