[RESOLVIDO]Ajuda List<>

2 respostas
Cledsonjr

Boa noite.

Estou precisando da ajuda dos Srs. em uma lista.

Estou adicionando o objeto a lista, essa lista está sendo somada. O problema é que na hora de mostrar eu estou usando um dataTable e esse dataTable mostra por exemplo 5 tuplas iguais, ou seja, ele esta repetindo o último objeto adicionado.

Adiciono o objeto
public void adcionarAlunoMae(){
		filho.add(filhosControle.getFilhos());
		maeControle.getMae().setFilhos(filho);
		System.out.println(maeControle.getMae().getFilhos());
	}
Listo os objetos no DataTable, mas só aparece o último objeto adicionado. E esse objeto aparece repetindo de acordo com o total de filhos que foi adicionado para a mãe.
public DataModel<Filhos> getListarFilhos() {
		
		listarFilhos = new ListDataModel<Filhos>(filho);
		
		if(maeControle.getMae().getFilhos() != null){
			return listarFilhos;
		}
		else{
			return null;
		}
	}

Sei que é um erro básico, mas n saquei o pq está acontencendo isso.
Se alguem puder ajudar, Serei grato!

2 Respostas

W

Isso parece muito com problema de referência.

Você deve estar adicionando a mesma referência de uma variável.

Mas como está modificando o valor associado a esta referência, acaba mostrando repetidamente a última mudança de valor em todas as linhas.

Exemplo do erro:

ArrayList<Product> listP = new ArrayList<Product>();
		Product p = new Product();
		
		// Adiciona
		for (int i = 0; i < 10; i++) {
			p.setDescricao("Produto " + i);
			listP.add(p);
		}
		
		// Imprime
		for (Product c: listP) {
			System.out.println(c.getDescricao());
		}

A correção é você criar uma nova referência para não utilizar a mesma.

Exemplo:

ArrayList<Product> listP = new ArrayList<Product>();
		Product p = null;
		
		// Adiciona
		for (int i = 0; i < 10; i++) {
 			p = new Product();
			p.setDescricao("Produto " + i);
			listP.add(p);
		}
		
		// Imprime
		for (Product c: listP) {
			System.out.println(c.getDescricao());
		}

Obs.: Veja que o “new” foi colocado dentro do laço.

wiliamps

Cledsonjr

wiliamps:
Isso parece muito com problema de referência.

Você deve estar adicionando a mesma referência de uma variável.

Mas como está modificando o valor associado a esta referência, acaba mostrando repetidamente a última mudança de valor em todas as linhas.

Exemplo do erro:

ArrayList<Product> listP = new ArrayList<Product>();
		Product p = new Product();
		
		// Adiciona
		for (int i = 0; i < 10; i++) {
			p.setDescricao("Produto " + i);
			listP.add(p);
		}
		
		// Imprime
		for (Product c: listP) {
			System.out.println(c.getDescricao());
		}

A correção é você criar uma nova referência para não utilizar a mesma.

Exemplo:

ArrayList<Product> listP = new ArrayList<Product>();
		Product p = null;
		
		// Adiciona
		for (int i = 0; i < 10; i++) {
 			p = new Product();
			p.setDescricao("Produto " + i);
			listP.add(p);
		}
		
		// Imprime
		for (Product c: listP) {
			System.out.println(c.getDescricao());
		}

Obs.: Veja que o “new” foi colocado dentro do laço.

wiliamps


Muito obrigado Williamps. Esse realmente era o problema, eu achava que eu deveria criar um novo objeto List e não o contrário.

Solução:

filho.add(filhosControle.getFilhos());
			maeControle.getMae().setFilhos(filho);
			filhosControle.inicializarObjetos();

@javax.annotation.PostConstruct public void inicializarObjetos() { this.filhos = new Filhos(); }

Criado 22 de outubro de 2012
Ultima resposta 23 de out. de 2012
Respostas 2
Participantes 2