如果不存在,则将新值放入Map中,如果不存在则添加它

Ric*_*ler 12 java java-8

我有一个java.util.Map<Foo, Double>关键类课程Foo.我们来调用地图的实例map.

我想在该地图中添加{ foo,f}(foo是一个实例Foof一个实例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#mergeDouble::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)


Kon*_*kov 7

你可以做:

map.put(foo, f + map.getOrDefault(foo, 0d));
Run Code Online (Sandbox Code Playgroud)

这里的将是对应于foo如果存在于Map或中的值0d,否则.