【发布时间】:2016-03-22 17:11:10
【问题描述】:
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 的 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;
});
但这并不比原来的好。我错过了什么明显的东西吗?
【问题讨论】:
标签: java dictionary java-8