Boa tarde pessoal!
Então, venho até aqui pra perguntar-lhes sobre esse método mágico.
removeAll é um método abstrato da interface List implementado pela ArrayList, etc.
Ele recebe como parâmetro outra collection e compara os elementos das removendo da original os que aparecem na collection passada pra esse método.
Enfim, fiz um teste com Strings e funcionou.
Depois fiz outro teste com objetos meus e nada da bagaça funcionar.
Sei que devo sobrescrever o método equals, pra que ele possa comparar os objetos e assim o fiz.
Vejam:
List<Pessoa> lista1 = new ArrayList<Pessoa>();
Pessoa p = new Pessoa();
p.setId(1);
p.setNome("ra");
lista1.add(p);
Pessoa p1 = new Pessoa();
p1.setId(2);
p1.setNome("ra2");
lista1.add(p1);
Pessoa p2 = new Pessoa();
p2.setId(3);
p2.setNome("ra3");
lista1.add(p2);
List<Pessoa> lista2 = new ArrayList<Pessoa>();
Pessoa p10 = new Pessoa();
p10.setId(1);
p10.setNome("ra");
lista2.add(p10);
Pessoa p11 = new Pessoa();
p11.setId(12);
p11.setNome("ra");
lista2.add(p11);
if(lista1.removeAll(lista2))
System.out.println("RemoveAll funfou\n"); //NEM ENTRA AQUI
System.out.println("Lista 1"); //DEVERIA SOBRAR APENAS OS elementos 2 e 3
for(Pessoa string : lista1){
System.out.println("ID [ "+string.getId()+" ] Pessoa: "+string.getNome());
}
System.out.println("Lista 2");
for(Pessoa pessoa : lista2){
System.out.println("ID [ "+pessoa.getId()+" ] Pessoa: "+pessoa.getNome());
}
Agora a classe pessoa:
public class Pessoa implements Serializable, CycleRecoverable, Comparable { //ignorem essas interfaces, é que pessoa é uma entidade
private int id;
...
@Override
public boolean equals(Object OBEJETO) {
if (OBEJETO instanceof Pessoa) {
Pessoa Pobj = (Pessoa) OBEJETO;
return Pobj.getId() == this.id;
} else {
return false;
}
}
@Override
public int hashCode() {
int hash = 5;
hash = 53 * hash + this.id;
return hash;
}
Alguma idéia do por quê do removeAll nao funcionar com meu objeto?
Preciso disso =Z
Obrigado!!