我试图在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);
}
但是这看起来很脏,因为我必须重新插入元素,并且我担心使迭代器失效。
有更好的方法吗?我使用的是最新版本的Java。
答案 0 :(得分:9)
由于您只想修改值,因此可以使用Map#replaceAll
:
DB: Steam_users
tables: id, steamid, name, avatar, credits
如果你可能有新的键要插入,那么 print $_SESSION['user']['credits'];
很有用,但由于你在同一组键上进行迭代,所以不是你的情况。
答案 1 :(得分:6)
一种方法是使用自{8}以来可用的Map#merge
:
for (java.util.Map.Entry<Foo, Double> entry : foos.entrySet()){
foos.merge(entry.getKey(), amount, Double::sum);
}
请注意使用方法引用符号::
,不要与C ++的范围解析运算符混淆。
这里我使用的是“罐头”功能Double::sum
,但您可以自己构建自己的乐趣,这使得这种方法特别强大。有关详细信息,请参阅https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#merge-K-V-java.util.function.BiFunction-
答案 2 :(得分:4)
您只需使用entry.setValue即可。文档说:
使用指定值替换此条目对应的值(可选操作)。 (写到地图上。)
所以:
for (java.util.Map.Entry<Foo, Double> entry : foos.entrySet()){
entry.setValue(entry.getValue() + amount));
}