Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果地图不存在,则将新值放入地图,如果存在,则添加新值_Java_Java 8 - Fatal编程技术网

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
。让我们调用map
map
的实例

我想将{
foo
f
}(
foo
foo
的一个实例,而
f
a
Double
)添加到该映射中。但是如果键
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)