Não consegui encontrar um método que modifica um objeto que está no value de uma key no HashMap (tipo trocar o número 1 pelo 2 e talz…). Como é possível fazer isso? Tentei remover o mapeamento da chave para o value e inserir a mesma chave com value diferente mas caiu na exceção “ConcurrentModificationException”. Alguma sugestão para contornar o problema?
Estou supondo que você está percorrendo o mapa e tentando modificar as entradas com “put”. Isso não deve ser feito se você está usando um Iterator obtido com keySet().iterator() ou com values().iterator(), já que “put” pode ou não alterar a própria tabela (ou seja, acrescentar mais uma entrada no mapa). Note que remover uma entrada do mapa, usando Iterator.remove, não é proibido…
O código a seguir faz algo parecido com o que você quer fazer. Note que eu não trabalho diretamente com as chaves, mas com as entradas do mapa (entrySet).
import java.util.*;
class Test181 {
public static void main(String[] args) {
Map map = new HashMap();
// O usuário 1 ganha 1000 reais, e assim por diante
for (int i = 1; i <= 10; ++i) {
map.put ("Usuario " + i, new Integer (i * 1000) );
}
// Dobrando o salário de todo mundo, exceto do usuário 7,
// e demitindo o usuário 8
for (Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
if (!"Usuario 7".equals ((String)entry.getKey()))
entry.setValue (new Integer (((Integer)entry.getValue ()).intValue() * 2));
if ("Usuario 8".equals ((String)entry.getKey()))
it.remove();
}
// Imprimindo o mapa
System.out.println (map);
}
}