如何在 Java 中迭代哈希映射值时替换它们

2022-08-31 13:25:54

我正在使用Runnable从玩家每秒的冷却时间中自动减去20,但我不知道如何在迭代时替换值的值。如何让它更新每个密钥的值?

public class CoolDownTimer implements Runnable {
    @Override
    public void run() {
        for (Long l : playerCooldowns.values()) {
            l = l - 20;
            playerCooldowns.put(Key???, l);
        }
    }

}

答案 1

使用 Java 8:

map.replaceAll((k, v) -> v - 20);

使用 Java 7 或更早版本:

您可以循环访问这些条目并更新这些值,如下所示:

for (Map.Entry<Key, Long> entry : playerCooldowns.entrySet()) {
    entry.setValue(entry.getValue() - 20);
}

答案 2

好吧,你不能通过迭代(就像你现在正在做的)中的值集来做到这一点,因为如果你这样做,那么你就没有对键的引用,如果你没有对键的引用,那么你就无法更新映射中的条目,因为你无法找出哪个键与你刚刚更新的值相关联。Map

使用“地图”时,您有两个类似更新的选项,在 中循环访问每个选项,或者可以循环访问密钥。有一些方法可以做到这两件事。就个人而言,我会遍历每个.Map.Entry<K,V>MapSetMapMap.Entry<K,V>

for (Map.Entry<String, Long> entry : playerCooldowns.entrySet()) {
    entry.setValue(entry.getValue() - 20);
}