HashMap e valores de incremento em Processamento
-
06-07-2019 - |
Pergunta
Eu tenho um HashMap que eu estou usando no processamento e eu gostaria de incrementar o valor no mapa. I Google'd-lo e ele me mostrou que o seguinte código está correto:
if (colors.containsKey(ckey))
{
colors.put(ckey, colors.get(ckey) + 1);
} else {
colors.put(ckey, 1);
}
Recebo:
O operador + é indefinido para o tipo de argumento (s) de objectos, int
Eu não sou um programador Java mas a referência diz ele retorna um objeto ... eu tenho que usar um método .getValue () nele para extrair o int?
Talvez eu estou fazendo algo errado? Hmmm.
Cumprimentos.
Solução
Eu não sei nada sobre 'Processamento' mas olhando para o código acima, você precisa typecast o valor em um número inteiro antes de adicionar.
Não tenho certeza versão que de Java está sendo usada aqui, mas você pode fazer algo como isto.
if (colors.containsKey(ckey))
{
int val = ((Integer) colors.get(ckey)).intValue();
colors.put(ckey, new Integer(val + 1);
}
else
{
colors.put(ckey, 1);
}
Outras dicas
Por padrão, o HashMap vai deixar você armazenar qualquer tipo de objeto sem verificar o tipo de objeto que está sendo usada tanto para chaves ou valores.
Você deve tentar declarar o seu HashMap usando a declaração de seu mapa tipo seguro:
HashMap<Color, Integer> colors = new HashMap<Color, Integer>();
(note que eu estou supondo que as chaves para o mapa são java.awt.Color e os valores são sempre int)