[RESOLVIDO] Criar arrayList com hashmap

14 respostas Resolvido
P

Boa tarde,

Preciso criar um List de Hashmap no seguinte modelo:

[
   {nome: "Lucas", email: "lucas@domino", valid: true},
   {nome: "Lucas2", email: "lucas2@domino", valid: false},
   {nome: "Lucas3", email: "lucas3@domino", valid: true},
]

Alguém teria ideia de como fazer?

Obrigada

14 Respostas

Fabricio_Bizo
Solucao aceita

Acredito que desta forma você consegue resolver.
Segue imagem em anexo.

jacoboliveira

Esse tipo de pergunta requer pelo menos que VC tenha tentado fazer alguma vez, mas como VC esta aprendendo o exemplo do Fabricio_Bizo Vale por hora, mas Priscilla não esqueça de quando VC tirar dúvida tente ao menos solucionar o problema sozinha, pois mostra que você ao,menos tentou fazer sozinha, assim VC vai aprender mais a resolver os seus problemas de código sozinha que é a real intenção deste fórum, você precisa estimular sua mente a criar algoritmos e buscar soluções, no proprio google tem solução pra isso e se não tiver veja como funciona cada estrutura de dados separadamente, não sei por que o Fabricio deu a resposta, pois esta pergunta é tão fácil que Vc conseguiria fazer sozinha com uma boa pesquisa no google ok . Abraços

P

jacoboliveira.

EU procurei, pesquisei, porém não consegui nessa estrutura que postei. A minha estrutura ficou diferente. Segue a classe para que você veja. A minha dúvida é em relação a estrutura.

@RequestMapping(value="addUsers", method = RequestMethod.POST) public String adiciona(HttpServletRequest request, Model model){
String ownerName = request.getParameter("owner");
	String ownerEmail = request.getParameter("owner_email");
	
	//System.out.println(String.format("Owner: [%s] - [%s]", ownerName, ownerEmail));
	
	User owner = new User(ownerName, ownerEmail);
	model.addAttribute("ownerValid", owner.isValid);
	
	List<User> users = new ArrayList<User>();
	ArrayList<HashMap<String, String>> dataEmails = new ArrayList<HashMap<String, String>>();
	HashMap<String, String> names = new HashMap<String, String>();
	HashMap<String, String> nomes = new HashMap<String, String>();
	HashMap<String, String> emails = new HashMap<String, String>();
	HashMap<String, String> validEmail = new LinkedHashMap<String, String>();
	Pattern pattName = Pattern.compile("user(\\d)");
	Pattern pattEmail = Pattern.compile("user(\\d)_email");
	String valdEmail;
	
	// Map names and emails
	for(String param: request.getParameterMap().keySet()) {
		Matcher m = pattName.matcher(param);
		if (m.matches() == true) {
			names.put(m.group(1), request.getParameter(param));
		}
		
		m = pattEmail.matcher(param);
		if (m.matches() == true) {
			emails.put(m.group(1), request.getParameter(param));
		}
	}
	
	// Create users objects
/*	for (Integer i = 1; i <= names.size(); i++) {
		String name = names.get(i.toString());
		String email = emails.get(i.toString());
	//	System.out.println(emailValid.get(i));
		//users.add(u);
	}*/
	
	for(Integer ne = 1; ne <= names.size(); ne++){
		User us = new User(names.get(ne.toString()),emails.get(ne.toString()));
		valdEmail = (us.isValid).toString();
		validEmail.put(ne.toString(),valdEmail);
		
	}
	
	dataEmails.add(names);
	dataEmails.add(emails);
	dataEmails.add(validEmail);
	
	
	
	model.addAttribute(users);
	model.addAttribute("ownerName", ownerName);
	model.addAttribute("ownerEmail", ownerEmail);
	request.setAttribute("dataEmails", dataEmails);

}
}

P

Não fale o que você não saiba. Percebe-se que você não tem humildade de ensinar os outros. Obrigada

jacoboliveira

Tá ok entendi, não fique chateada não , tem muita gente que quer se aproveitar dos outros , não digo VC , mas tem pessoas que ficam “usando” as pessoas para solucionar seus problemas aparentemente faceis de resolver, principalmente universitários que não sabem nem começar um código. Vc e outros tem que entender que ninguém vai da a solução de mão beijada a pessoa tem que fazer alguma coisa pesquisar algo.
Pela sua última postagem ficou um pouco incoerente com sua pergunta principal, VC pegou de algum site esse código? Parece-me que esse código é do spring framework, acho que esse nível de implementação esta um pouco avançada pra vc é isso mesmo que vc esta querendo? por favor seja um pouco clara no que VC quer. Por incrível que pareça eu quero ajudar Vc assim como o Fabricio. Explique-me melhor

P

Oi Jacob,

Bom dia,

Entendi. Tudo bem. É que já estou com dificuldades em algo simples. O problema é que minha estrutura está ficando assim:

[{nome=Lucas, nome=Igor}, {email=[email removido], email=[email removido]}, {valid=true, valid=true}]

E preciso que ela fique assim:

[
{nome: “Lucas”, email: “lucas@gmail”, valid: true},
{nome: “Igor”, email: “igor@gmail”, valid: false},
]

P

Obrigada Fabricio.

Vou tentar

P

O problema é que minha estrutura está ficando assim:

[{nome=Lucas, nome=Igor}, {email=[email removido], email=[email removido]}, {valid=true, valid=true}]

E preciso que ela fique assim:

[
{nome: “Lucas”, email: “lucas@gmail”, valid: true},
{nome: “Igor”, email: “igor@gmail”, valid: false},
]

P

Fabrício,

Muito obrigada, com sua ajuda consegui resolver meu problema. Meu for ficou assim

for(Integer ne = 1; ne <= names.size(); ne++){
		User us = new User(names.get(ne.toString()),emails.get(ne.toString()));
		List<Map> dataEmails = new ArrayList();
		valdEmail = (us.isValid).toString();
		name.put("nome: ", names.get(ne.toString()));
		email.put("email: " , emails.get(ne.toString()));
		valid.put("valid: ", validEmail.get(ne.toString()));
		validEmail.put("valid: ",valdEmail);
		dataEmails.add(name);
		dataEmails.add(email);
		dataEmails.add(validEmail);
		System.out.println(dataEmails);
	}
P

Jacob consegui resolver meu problema. Meu for ficou assim

for(Integer ne = 1; ne <= names.size(); ne++){
		User us = new User(names.get(ne.toString()),emails.get(ne.toString()));
		List<Map> dataEmails = new ArrayList();
		valdEmail = (us.isValid).toString();
		name.put("nome: ", names.get(ne.toString()));
		email.put("email: " , emails.get(ne.toString()));
		valid.put("valid: ", validEmail.get(ne.toString()));
		validEmail.put("valid: ",valdEmail);
		dataEmails.add(name);
		dataEmails.add(email);
		dataEmails.add(validEmail);
		System.out.println(dataEmails);
	}
jacoboliveira

Eu ainda acho que seu for deveria ficar que nem o exemplo do Fabricio, assim:

for(Integer ne = 1; ne <= names.size(); ne++){
        //criar a instancia do map dentro do for
        Map<String,Object> map = new LinkedHashMap<>();
        List<Map<String,Object>> dataEmails = new LinkedList<>();
        User us = new User(names.get(ne.toString()),emails.get(ne.toString()));
	
	valdEmail = (us.isValid).toString();
	map.put("nome: ", names.get(ne.toString()));
	map.put("email: " , emails.get(ne.toString()));
	map.put("valid: ", validEmail.get(ne.toString()));
        //validEmail.put("valid: ",valdEmail); //essa linha pra mim é desnecessária(esta se repetindo) uma vez que você esta incluindo logo acima
	dataEmails.add(map);		
	System.out.println(dataEmails);
   }

Dai seu for ficará agrupado assim
[{nome: “Lucas”, email: “lucas@gmail”, valid: true}]
[{nome: “Igor”, email: “igor@gmail”, valid: false}]

do jeito que VC fez ficaria assim:
[{nome:“Lucas”}]
[{email:“[email removido]”}]
[{valid:true}]
e mais o outra repetição
[{valid:true}]

é isso mesmo que VC quer?

P

Não. É do jeito que vc falou mesmo. Agrupado.

Obrigada, vou alterar aqui

jacoboliveira

outra detalhe é VC tirar a lista pra fora do for:

List<Map<String,Object>> dataEmails = new LinkedList<>();
 for(condicao){ 
    Map<String,Object> map = new LinkedHashMap<>();
    //seu codigo
 }
 System.out.println(dataEmails);
P

Ela eu coloquei fora do for até porque eu vou precisar dela na JSP

Criado 14 de junho de 2016
Ultima resposta 15 de jun. de 2016
Respostas 14
Participantes 3