Zac*_*ano 53 java hashmap runnable
我使用Runnable每秒从玩家冷却时间自动减去20,但我不知道如何在迭代它时替换值的值.如何让它更新每个键的值?
public class CoolDownTimer implements Runnable {
@Override
public void run() {
for (Long l : playerCooldowns.values()) {
l = l - 20;
playerCooldowns.put(Key???, l);
}
}
}
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 94
使用Java 8:
map.replaceAll((k, v) -> v - 20);
Run Code Online (Sandbox Code Playgroud)
使用Java 7或更早版本:
您可以迭代条目并更新值,如下所示:
for (Map.Entry<Key, Long> entry : playerCooldowns.entrySet()) {
entry.setValue(entry.getValue() - 20);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 26
好吧,你不能通过迭代Map(正如你现在正在做的)中的值集来做到这一点,因为如果你这样做那么你没有引用键,如果你没有引用键,那么您无法更新地图中的条目,因为您无法找到与刚刚更新的值相关联的键.
当使用地图时,您有这样的更新两种选择,通过每个迭代Map.Entry<K,V>中Map,或者您也可以通过按键进行迭代Set.有两种方法Map可以做这两件事.就个人而言,我会遍历每一个Map.Entry<K,V>.
for (Map.Entry<String, Long> entry : playerCooldowns.entrySet()) {
entry.setValue(entry.getValue() - 20);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53118 次 |
| 最近记录: |