对集合映射的一个非常常见的操作是,当键不存在时创建一个具有初始值的新集合,或者如果键存在,则对现有集合执行某些功能。举个例子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;
}
});
}
这是另一种选择:
Set<Integer> set = m.computeIfAbsent (key , k -> new HashSet<> ());
set.add(set.size() + 1);
这是两个衬垫(而不是一个)的唯一原因是需要获取当前的尺寸Set
以便决定添加哪个值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)