Java 8为Map
接口引入了一些不错的方法。对我来说,差距是没有merge
方法的可变版本。
例如,假设map
是Map<String, List<Integer>>
,您希望这样做:
List<Integer> list = map.get("a");
if (list == null)
list = map.put("a", new ArrayList<>());
list.add(1);
(我知道你可以使用Guava&#39; 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;
});
但这并不比原版好。我错过了一些明显的东西吗?
答案 0 :(得分:4)
computeIfAbsent
返回与键关联的值,该值是当前值或映射函数构造的值。所以你可以简单地拥有
map.computeIfAbsent("a", k -> new ArrayList<>()).add(1);