Galera, estou tentando fazer um algoritmo para isto, mas não estou conseguindo.
O que tenho é dois ArrayList de Objetos, com valores diferentes porém com um id em comum, o que eu queria era comparar estes dois ID e extrair para um terceiro array SOMENTE os valores que estão no Array1 mas não estão no Array2.
Exemplo
No 1º ArrayList tenho os objetos com os seguintes ID’s
1
2
3
4
5
E no 2ºArrayList tenho os objetos com os seguintes ID’s
4
2
Eu queria passar para um terceiro Array os seguintes valores
1
3
5
(Que estão no Array 1, Mas não estão no 2);
Os arraylist são de um mesmo objeto, porém estão com valores diferentes, somente o Id que coincide.
Ou seja não tem como comparar o objeto inteiro, tem que comparar o atributo que está dentro de cada um deles!
Obrigada!
Basta usar o método removeAll.
List<Integer> list3 = new ArrayList<Integer>(list1);
list3.removeAll(list2);
Para que isso funcione, sua classe deve ter o equals implementado corretamente.
A dica do Vinícius é a mais simples, mas caso você precise fazer na mão (exercício???), o algoritmo seria esse:
1 - Crie um ArrayList que vai conter os objetos que você quer armazenar.
2 - Itere pelo primeiro ArrayList.
3 - Durante a iteração do primeiro ArrayList, itere pelo segundo ArrayList, ou seja, um for dentro de outro.
4 - Verifique: o id do objeto corrente da iteração do ArrayList 1 tem o mesmo valor do id do objeto corrente da iteração do ArrayList 2?
5 - Se sim, insira o objeto do ArrayList 1 ou do ArrayList 2 no terceiro ArrayList e dê um break no for mais interno, afinal, vc já achou o que procurava.
Esse é o algoritmo mais burrinho. Vc pode usar a API de List para simplificá-lo, ou então fazer como o Vinícius disse caso não precise fazer na raça.
No final da execução dos dois fors você vai ter então o terceiro ArrayList preenchido com os objetos desejados.
Se os objetos que você está usando são diferenciados somente pelo id (o que é muito provável), recomento que você implemente o método equals como o Vinícius falou. Assim seu código fica mais genérico.
[]´s
Devo implementar o método equal nas duas classes??
Cada ArrayList contém tipos de objetos diferentes?
Se sim, o equals não vai adiantar nada, pq vc deveria compar objetos do mesmo tipo com ele.
[]´s
Ops, me atrapalhei… rsrs
Desculpe-me!
Então são do mesmo objeto… Estou desenvolvendo uma aplicação web… Meu método equal ficaria dentro da servlet??
Dentro da classe dos objetos que estão sendo instanciados.
Obrigado pela ajuda, davidbuzatto e ViniGodoy !
Vou tentar resolver meu problema mais tarde e qualquer coisa retorno aqui!
(: