O meu objetivo é percorrer um HashMap e verificar se uma chave na estrutura, caso exista quero alterar o valor dessa chave. Mas propositalmente a chave não existe e devo criar um elemento dentro do loop para ser adicionado ao HashMap.
O problema que encontrei é que não foi permitido alterar o meu HashMap dentro do loop for
.
A solução que encontrei foi no StackOverFlow, porém é datado de 2015 e não sei uma forma melhor atualmente.
Segue a implementação:
public class Main {
public static void main(String[] args) {
Map<String, Integer> personsMap = new HashMap<>();
Person p1 = new Person("Daniel", 23);
Person p2 = new Person("Jose", 61);
Person p3 = new Person("Maria", 31);
personsMap.put(p1.getName(), p1.getAge());
personsMap.put(p2.getName(), p2.getAge());
personsMap.put(p3.getName(), p3.getAge());
System.out.println(personsMap);
Map<String, Integer> temp = new HashMap<>();
for (Map.Entry<String, Integer> entry : personsMap.entrySet()) {
if (entry.getKey().equalsIgnoreCase("Mateus")) {
entry.setValue(25);
} else {
Person px = new Person("Mateus", 25);
temp.put(px.getName(), px.getAge());
}
}
personsMap.putAll(temp);
}
Basicamente, a solução acima sugere criar uma HashMap auxiliar e depois “copiar” os seus elementos para o HashMap principal.
Existe uma forma mais simples?
discussão no StackOverFlow: iterator - Java HashMap add new entry while iterating - Stack Overflow