我有一个java.util.Map<Foo, Double>关键类课程Foo.我们来调用地图的实例map.
我想在该地图中添加{ foo,f}(foo是一个实例Foo和f一个实例Double).但是如果密钥foo已经存在,我想总结f到该映射中的当前值.
目前我用
Double current = map.get(foo);
f += current == null ? 0.0 : current;
map.put(foo, f);
Run Code Online (Sandbox Code Playgroud)
但是在Java 8中有没有一种时髦的方法,例如使用Map#merge和Double::sum?
遗憾的是我无法弄明白.
谢谢.
Ash*_*Ash 24
这就是地图上的合并功能.
map.merge(foo, f, (f1, f2) -> f1 + f2)
Run Code Online (Sandbox Code Playgroud)
这可以进一步减少到
map.merge(foo, f, Double::sum)
Run Code Online (Sandbox Code Playgroud)
它基本上相当于
if(map.contains(foo)){
double x = map.get(foo);
map.put(foo, x + f)
} else {
map.put(foo, f)
}
Run Code Online (Sandbox Code Playgroud)
你可以做:
map.put(foo, f + map.getOrDefault(foo, 0d));
Run Code Online (Sandbox Code Playgroud)
这里的值将是对应于foo如果存在于Map或中的值0d,否则.