2014-06-19 47 views
6

Ben bir anahtar olarak bir tamsayı ve bir değer olarak dizeleri listesini içerecek bir HashMap oluşturmaya çalışıyorum: ben bir şekilde verimli bir şekilde doldurmak istiyoruzJava 8 harita birleştirme yöntemi

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(30); 

.

map.merge(search_key, new ArrayList<>(Arrays.asList(new_string)), (v1, v2) -> { 
        v1.addAll(v2); 
        return v1; 
       }); 
Bu kod küçük

ve zarif ama benim sorunum ben her çağrıda yeni listesi oluşturmak şudur: Ne geldi oldu. İlk birleştirme sonrasında Liste oluşturmayı atlamanın ve oluşturulan ilk listeye yeni_string eklemenin bir yolu var mı?

+1

ama kırık “Bu kod küçük ve zarif”. 'Arrays.asList' sonucunu 'addAll' çağırmaya çalışıyorum… – Holger

+0

@Holger Haklısınız. Benim hatam Arrays.asList (new_string) sabit bir liste veriyor, düzelteceğim. –

cevap

16

Sen tembel bir liste oluşturmak için yöntem Map::computeIfAbsent kullanmalıdır:

map.computeIfAbsent(search_key, k -> new ArrayList<>()) 
    .add(new_string);