[RESOLVIDO] Map: adicionar uma lista completa, fica só o ultimo elemento da lista

5 respostas
I

Olá Pessoal!

Preciso de uma ajudinha de voces.

Tenho o map abaixo:

Map<String, Object> dados = new HashMap<String, Object>();

Nesse map é adicioado uma lista:

for(int i = 0; i < listaValidacao.size(); i++){ dados.put("validacoes", listaValidacao.get(i)); }

Essa lista “listaValidacao” traz 3 elementos, porém só o ultimo fica adicionado no map. Como adicionar os 3 registros da lista?

Agradeço desde já!

5 Respostas

R

Você tem um map de Object, faça um map de Lista.

Quando você faz .get(i) você está pegando o valor na posição e SOBRESCREVENDO o valor antigo, ou seja, dada a lista:

[10, 20, 40]

E o mesmo mapa (primeiramente vazio)

{}
O seguinte fluxo acontece no seu for”:

1 - o mapa ganha o primeiro elemento da lista, ficando assim: {“validacoes : 10}

2 - o mapa ganha o segundo elemento da lista, ficando assim: {“validacoes : 20}

3 - o mapa ganha o terceiro elemento da lista, ficando assim: {“validacoes : 40}

O que você quer é o seguinte:

Map&lt;String, List&gt; dados = new HashMap&lt;String, List&gt;(); 
// ...
dados.put("validacoes", listaValidacao);

Assim, seu mapa fica com o seguinte formato:
{“validacoes” : [10, 20, 40]}

A

EDIT

Tinha deixado a tela de resposta aberta por muito tempo. Neste meio tempo o Rafael já tinha respondido, a resposta dele está bem mais completa.

FIM EDIT

Izaura,
A estrutura de um MAP é <chave, valor>.

dados.put("validacoes", listaValidacao);

Como esta invocando put sempre com a mesma chave(“validacoes”) o que faz é atualizar apenas.

I

Obrigado a todos!

Resolvi da seguinte forma:

String validacao = "";
        for(int i = 0; i < listaValidacao.size(); i++){
            validacao += listaValidacao.get(i) + "\n";            
        }
        
       dados.put("validacoes", validacao);
R

O seu “for” pode ficar assim:

StringBuilder validacao = new StringBuilder(); // StringBuilder é mais rápido quando você precisa concatenar mais de 3 Strings.
for(String value : listaValidacao) { // Você pode usar essa Sintaxe, ela é mais fácil de ler.
   validacao.append(value).append("\n"); // Faz exatamente a mesma coisa que: validacao += listaValidacao.get(i) + "\n";
}

dados.put("validacoes", validacao.toString()); // Precisa fazer o .toString() depois
I
Rafael Guerreiro:
O seu "for" pode ficar assim:
StringBuilder validacao = new StringBuilder(); // StringBuilder é mais rápido quando você precisa concatenar mais de 3 Strings.
for(String value : listaValidacao) { // Você pode usar essa Sintaxe, ela é mais fácil de ler.
   validacao.append(value).append("\n"); // Faz exatamente a mesma coisa que: validacao += listaValidacao.get(i) + "\n";
}

dados.put("validacoes", validacao.toString()); // Precisa fazer o .toString() depois

Valeu pela dica Rafael Guerreiro!

Criado 8 de janeiro de 2014
Ultima resposta 8 de jan. de 2014
Respostas 5
Participantes 3