我正在尝试将特定值添加到地图中Java,其中键非常复杂,但值是一个简单的Double.
目前我正在使用,其中foos是一个实例java.util.TreeMap<Foo, Double>,并且amount是一个Double代码,如:
for (java.util.Map.Entry<Foo, Double> entry : foos.entrySet()){
foos.put(entry.getKey(), entry.getValue() + amount);
}
Run Code Online (Sandbox Code Playgroud)
但这看起来很脏,我必须重新插入元素,我担心使迭代器失效.
有没有更好的方法呢?我正在使用最新版本的Java.
由于您只想修改值,因此可以使用Map#replaceAll:
foos.replaceAll((k, v) -> v + amount);
Run Code Online (Sandbox Code Playgroud)
merge 如果你可能有新的键要插入,这是很有用的,但这不是你的情况,因为你在迭代同一组键.
一种方法是使用Map#merge它,因为Java版本8,已经可用:
for (java.util.Map.Entry<Foo, Double> entry : foos.entrySet()){
foos.merge(entry.getKey(), amount, Double::sum);
}
Run Code Online (Sandbox Code Playgroud)
注意使用方法引用符号::,不要与C++ 的范围解析运算符混淆.
在这里,我使用"罐头"功能,Double::sum但你可以有很多乐趣构建自己的功能,这使得这种方法特别强大.有关详细信息,请参阅https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#merge-KV-java.util.function.BiFunction-
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |