Pessoal como posso verificar e remover duplicatas de uma lista?
Obrigado.
Copie os elementos dessa lista para uma coleção que não aceite duplicatas (como um LinkedHashSet), limpe o arraylist original, e então copie de volta os elementos do LinkedHashSet para seu ArrayList. É preciso que hashCode e equals estejam definidos corretamente na classe cujos elementos integram a lista.
Ou podes usar logo de início um LinkedHashSet se nunca quiseres inserir duplicados.
Hum legal,mas eh que preciso emitir uma mensagem para o usuario qdo for encontrada uma duplicata.
uai so…
Set<String> tree = new TreeSet<String>();
tree.add("celso");
if (!tree.add("celso")) {
System.out.println("Elemento já existe");;
}
ta dando nullPointer pq minha lista servicos e um arrayList e naum tem como mudar pois esta em um framework criado aqui msm na empresa,
O que posso fazer para resolver isso?
Obrigado.
@Override
public void save() {
HashSet<ItemServicoVenda> listaServicos = (LinkedHashSet<ItemServicoVenda>) getWindowContext().getAttribute(getClass().getCanonicalName() + ".table");
getRequest().getSession().setAttribute("listaServicos", listaServicos);
super.save();
super.create();
HashSet<ItemServicoVenda> tree = new LinkedHashSet<ItemServicoVenda>();
System.out.println("lista servicos....:" + listaServicos.size());
for (ItemServicoVenda item : listaServicos) {
try {
tree.add(item);
if (!tree.add(item)) {
getListException().add(new FormActionException("Este item já foi incluido na NotaFiscal."));
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
listaServicos = null;
listaServicos.addAll(tree);
getRequest().getSession().setAttribute("listaServicos", listaServicos);
super.save();
super.create();
}
Em primeiro lugar, eu fiz dois add’s apenas para demonstrar… dentro do for, não precisa fazer…
Estou vendo o seu código…
EDIT: onde você está tomando o NPE?
EDIT2: nunca lance uma Exception
Acho que achei.
Faça as correções que sugeri no post anterior.
E… tchannananan…
listaServicos = null;
listaServicos.addAll(tree);
?!?!?!?!?!
Você está “matando” seu objeto e tentando adicionar algo nele.
Acho que é isso aí…
Não é à toa que setar algo para null é um “Code Smell” (ou seja, coisa que cheira mal e que pode ser um bug).
olha soh dei uma mexida mas nao deu certo ele deixa incluir dois itens identicos
@Override
public void save() {
List<ItemServicoVenda> listaServicos = (List<ItemServicoVenda>) getWindowContext().getAttribute(getClass().getCanonicalName() + ".table");
getRequest().getSession().setAttribute("listaServicos", listaServicos);
super.save();
super.create();
Set<ItemServicoVenda> tree = new TreeSet<ItemServicoVenda>();
for (ItemServicoVenda item : listaServicos) {
try {
System.out.println("Entrou no for.>>>>>>>>>>>>>>>>>>>>>>");
if (!tree.add(item)) {
System.out.println("Entrou no tree.add(item).>>>>>>>>>>>>>>>>");
getListException().add(new FormActionException("Este item já foi incluido na NotaFiscal."));
}
} catch (Exception ex) {
ex.printStackTrace();
getListException().add(new FormActionException("Este item já foi incluido na NotaFiscal."));
}
}
Iterator itr = tree.iterator();
listaServicos.clear();
getWindowContext().setAttribute(getClass().getCanonicalName(), listaServicos);
while (itr.hasNext()) {
ItemServicoVenda item = (ItemServicoVenda) itr.next();
listaServicos.add(item);
}
getRequest().getSession().setAttribute("listaServicos", listaServicos);
getWindowContext().setAttribute(getClass().getCanonicalName(), listaServicos);
System.out.println("Lista size>>>>>>>>>>>>" + listaServicos.size());
System.out.println("Lista size table>>>>>>>>>>>>" + listaServicos.size());
}
Cara, acredito que a questão agora é que você está trabalhando com objetos. Objetos podem ter estados (valores dos atributos) idênticos, sem necessariamente serem iguais.
Então, tecnicamente, você não está incluindo nada repetido.
Por enquanto, ainda não pensei em nada que não fosse POG.
Mas acho que o caminho é esse. Vou continuar pensando. E você pensa por aí. Se arrumar alguma forma, posta.
EDIT: Esses seus objetos (Item) não possuem identificação?
Se você está usando um TreeSet, então ItemServicoVenda tem um método “compare”. Como é que ele foi implementado?
Se você está usando um TreeSet, então ItemServicoVenda tem um método “compare”. Como é que ele foi implementado?[/quote]
salve thingol,realmente nao tinha pensado nisso,implementei o metodo compareTo comparando pelo id e pelo objeto e td funcionou perfeitamente.
Obrigado pela ajuda amigos t+.