[RESOLVIDO] Criar arrayList com hashmap

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

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

1 curtida

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

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);

}
}

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

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

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=lucas@gmail.com, email=igor@gmail.com}, {valid=true, valid=true}]

E preciso que ela fique assim:

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

Obrigada Fabricio.

Vou tentar

O problema é que minha estrutura está ficando assim:

[{nome=Lucas, nome=Igor}, {email=lucas@gmail.com, email=igor@gmail.com}, {valid=true, valid=true}]

E preciso que ela fique assim:

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

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);
	}

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);
	}

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:“lucas@email.com”}]
[{valid:true}]
e mais o outra repetição
[{valid:true}]

é isso mesmo que VC quer?

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

Obrigada, vou alterar aqui

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);

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

1 curtida