recorrer example diccionario java hashmap runnable

example - Cómo reemplazar los valores de HashMap al iterar sobre ellos en Java



recorrer un linkedhashmap java (3)

¿Por qué no iterar sobre los objetos Map.Entry ? Cada Entry te dará la clave y el valor, y no tienes que realizar un get() adicional en el Map para obtener un valor.

Estoy usando un Runnable para restar 20 automáticamente del tiempo de reutilización de un jugador por segundo, pero no tengo idea de cómo reemplazar el valor de un valor mientras lo recorro. ¿Cómo puedo hacer que actualice el valor de cada clave?

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


Bueno, no puede hacerlo iterando sobre el conjunto de valores en el Map (como lo está haciendo ahora), porque si lo hace, entonces no tiene referencia a las teclas, y si no tiene referencia a las teclas, entonces no puede actualizar las entradas en el mapa, porque no tiene forma de averiguar qué tecla se asoció con el valor que acaba de actualizar.

Cuando trabaje con Maps, tiene dos opciones para actualizaciones como esta, itere a través de cada Map.Entry<K,V> en el Map , o puede iterar a través de la tecla Set . Hay métodos en Map para hacer ambas cosas. Personalmente, Map.Entry<K,V> través de cada Map.Entry<K,V> .

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


Usando Java 8:

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

Usando Java 7 o anterior:

Puede iterar sobre las claves y actualizar los valores de la siguiente manera:

for (Key k : playerCooldowns.keySet()) { playerCooldowns.put(k, playerCooldowns.get(k) - 20); }

O itere sobre las entradas de la siguiente manera:

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