<分区>
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;
});
但这并不比原来的好。我是否遗漏了一些明显的东西?