2016-03-22 13 views
4

Java 8は、Mapインターフェイスにいくつかの素敵なメソッドを導入しました。私にとって、ギャップは、mergeメソッドの変更可能なバージョンがないということです。例えばMap.mergeの変更可能なバージョン

mapMap<String, List<Integer>>であり、あなたはこれを行うにしたいとします

List<Integer> list = map.get("a"); 
if (list == null) 
    list = map.put("a", new ArrayList<>()); 
list.add(1); 

(私はあなたがこの種のもののためにグアバのMultiMapを使用することができることを承知していますが、私は標準的なJavaに興味を。 )

私には、Java 8でこれを単純化する良い方法があるはずですが、私はそれを見つけることができません。私は

map.mutableMerge("a", 1, ArrayList::new, List::add);  // Not real code 

のように、それは単一のメソッド呼び出しでなければなりません数えるが、私は新しいメソッドを使用して思い付くことができる最高は

map.computeIfAbsent("a", k -> new ArrayList<>()); 
map.compute("a", (k, v) -> { 
    v.add(1); 
    return v; 
}); 

であるが、これは、元のよりも良いではありません。私は明白な何かを欠いていますか

答えて

4

computeIfAbsentは、キーに関連付けられた値を返します。キーの値は、現在のキーまたはマッピング関数によって作成されたキーのいずれかです。だからあなたは簡単に持っていることができます

map.computeIfAbsent("a", k -> new ArrayList<>()).add(1); 
+0

私は彼らがそれを考えなければならないことを知っていました。私は厚くて、私は15分で受け入れます。ありがとうございました。 –

関連する問題