在集合映射中,非常常见的操作是创建一个新的集合,并在键不存在时设置初始值,或者如果键存在,则对现有集合执行某些函数。例如,考虑一个 Map<String, Set<Integer>>
,如果键不存在,则创建一个带有初始值为1的Set。如果键存在,则将值map.size()+1添加到集合中(或将此函数替换为其他简单的一行操作)。在Java 7中,使用if/else很简单,但代码比较冗长。我只能想出下面的Java 8代码,它并不比之前更好(实际上由于代码更多而更差)。有没有办法使这个代码更加简洁?
public void process(Map<String, Set<Integer>> m, String key) {
m.compute(key, (k, v) -> {
if (v == null) {
v = new HashSet<>();
v.add(1);
return v;
} else {
v.add(v.size() + 1);
return v;
}
});
}
[1, 2, 3, 4, 5]
没有意义,因为你可以只存储数字 5。 - Michael