Excluir Objetos Repetidos na Lista

8 respostas
D

Galera Tenho uma lista de bean onde não posso mostrar itens repetidos o porém é que somente 4 atributos não podem ser iguais, vou tentar explicar melhor

List<Bean> listaBean = new ArrayList<Bean>();

Bean bean = new Bean();
bean.setAltura(15);
bean.setLargura(20);
bean.setComprimento(5);
bean.setM3(60);
bean.setValor(10);
listaBean.add(bean);

bean = new Bean();
bean.setAltura(15);
bean.setLargura(20);
bean.setComprimento(5);
bean.setM3(60);
bean.setValor();
listaBean.add(bean);

bean = new Bean();
bean.setAltura(50);
bean.setLargura(75);
bean.setComprimento(30);
bean.setM3(100);
bean.setValor(20);
listaBean.add(bean);

Bom observem que o primeiro e o segundo são iguais porém um tem valor e o outro não, preciso mostrar somente no que tem o valor, mais to apanhando muito para isso acontencer

8 Respostas

A

usa Predicate

tanto as libs de collection do google, quanto do apache tem suporte a Predicate

F

Aqui http://stackoverflow.com/questions/2955043/predicate-in-java tem uns exemplos simples de Predicate.

D

Nunca usei ele mais o que necessariamente eu deveria usar?

A

o predicate permite que você execute um teste para cada elemento da sua Collection, o teste tem que retornar verdadeiro ou falso, aí você decide se imprime ou não os valores do objeto que você está testando

olha os exemplos, que você vai entender

F

Que tal utilizar o proprio Java?

Subcreve o metodo equals() do seu Bean, dizendo que 2 objetos Bean sao iguais se <composicao dos 4 valores que vc quer sao iguais>
Subscreva tb o metodo hashCode().

Pronto, agora basta ao inves de vc adicionar eles em List, vc adicionar em Set. Ex: LinkedHashSet
A interface Set ja cuida de bloquear a adicao de duplicatas (agora que vc disse o que sao 2 Beans iguais)

A

fabim:
Que tal utilizar o proprio Java?

Subcreve o metodo equals() do seu Bean, dizendo que 2 objetos Bean sao iguais se <composicao dos 4 valores que vc quer sao iguais>
Subscreva tb o metodo hashCode().

Pronto, agora basta ao inves de vc adicionar eles em List, vc adicionar em Set. Ex: LinkedHashSet
A interface Set ja cuida de bloquear a adicao de duplicatas (agora que vc disse o que sao 2 Beans iguais)

Diogo, vc já tem a lista dessa forma, e quer imprimir só os que tem valor, ou vc vai criar a lista e não pode ter itens repetidos ?

7

Mesmo já tendo a lista, a melhor saida é como fabim falou.

Sobrescreve o equals, especificando por quais atributos o seu Bean será igual/diferente de outro. Depois sobrescreve o hascode.

Tendo a lista já, basta fazer isso, por exemplo:

Set conjuntoDeBeans= new HashSet(listaDeBeansJaPronta);

Atts,

A

71C4700:
Mesmo já tendo a lista, a melhor saida é como fabim falou.

Sobrescreve o equals, especificando por quais atributos o seu Bean será igual/diferente de outro. Depois sobrescreve o hascode.

Tendo a lista já, basta fazer isso, por exemplo:

Set conjuntoDeBeans= new HashSet(listaDeBeansJaPronta);

Atts,

E também sobrescreva o hashCode() usando os mesmos campos usados no equals, pois ficara bem mais eficiente.

Criado 24 de fevereiro de 2012
Ultima resposta 26 de fev. de 2012
Respostas 8
Participantes 6