Java 如果地图不存在,则将新值放入地图,如果存在,则添加新值
我有一个键类型类Java 如果地图不存在,则将新值放入地图,如果存在,则添加新值,java,java-8,Java,Java 8,我有一个键类型类Foo的java.util.Map。让我们调用mapmap的实例 我想将{foo,f}(foo是foo的一个实例,而faDouble)添加到该映射中。但是如果键foo已经存在,我想将f和该映射中的当前值相加 目前我使用 Double current = map.get(foo); f += current == null ? 0.0 : current; map.put(foo, f); 但是在Java8中有没有一种时髦的方法可以做到这一点,比如使用Map#merge和Doub
Foo
的java.util.Map
。让我们调用mapmap
的实例
我想将{foo
,f
}(foo
是foo
的一个实例,而f
aDouble
)添加到该映射中。但是如果键foo
已经存在,我想将f
和该映射中的当前值相加
目前我使用
Double current = map.get(foo);
f += current == null ? 0.0 : current;
map.put(foo, f);
但是在Java8中有没有一种时髦的方法可以做到这一点,比如使用Map#merge
和Double::sum
很遗憾,我想不出来
谢谢。您可以:
map.put(foo, f + map.getOrDefault(foo, 0d));
这里的值将是对应于
foo
的值,如果存在于Map
或0d
,否则。这就是Map上的合并函数的作用
map.merge(foo, f, (f1, f2) -> f1 + f2)
这可以进一步降低到
map.merge(foo, f, Double::sum)
它基本上相当于
if(map.contains(foo)){
double x = map.get(foo);
map.put(foo, x + f)
} else {
map.put(foo, f)
}
这是一件很小的事情,但它确实在地图上做了两次查找。但是我仍然投票。在哪里添加
f
假设f+map.getOrDefault(foo,0d)