Listas

8 respostas
yumelee

Sei que algumas pessoas fizeram essa pergunta aqui, mas nao quero comparar duas listas iguais, quero comparar e remover listas do tipo:

lista1
id
nome
endereco
telefone

lista2
id
nome
idade
peso
altura

quero comparar ids, se forem iguais quero deletar da lista1
Nao gostaria de fazer ninho de ifs.
Tem como comparar direto ids de uma lista com de outra e já deletar.
Sem fazer if dentro de if?

Abs
Yume

8 Respostas

Giulliano

o jeito mais fácil é usando dois for (um para cada lista) e comparar com um único if.

vc não vai escrever vários ifs pra fazer isso.

yumelee

Ficar comparando um a um!!!
Não é processamento demais ?
Nao tem como eu achar ids iguais e remove-los, sem ficar comparando um a um???

douglaskd

a lógica é essa…

for (i até tamanho_da_lista1) for (j até tamanho_da_lista2) se(lista1[i].ID == lista2[j].ID) //excluir

Antonio_Carlos_M_Gom

você esta usando um banco de dados?

yumelee

lista! Duas listas…
E podem ser bem grandes…
abs

pmlm

Se as duas classes extenderem uma mesma classe:

abstract class AbstractSuperClass{

    abstract String getId();
    
    @Override
    public boolean equals(Object other){
        
        if (other == null){
            return false;
        }
        
        if (!(other instanceof AbstractSuperClass)){
            return false;
        }

        AbstractSuperClass o= (AbstractSuperClass) other;        

        if (this.getId() == null){
            return false;
        }

        return this.getId().equals(o.getId());
    }
   
    @Override 
    public int hashCode(){
        if (this.getId() == null){
            return 0;
        }   
        
        return this.getId().hashCode();     
    }

}

Podes fazer simplesmente:

list1.removeAll(list2);
diego.sas

yumelee:
lista! Duas listas…
E podem ser bem grandes…
abs

Uma saída seria adicionar em um HashSet as duas listas…
Devido o Set não add duplicados…

Set<Object> lista = new HashSet<Object>();
lista.addAll(lista);
lista.addAll(listaII);
Rodrigo_Sasaki

pode usar binarySearch() e deletar uma da outra…

claro que teria que ordernar a lista 1… e sei que pode parecer exagero, mas o processamento acaba sendo bem rápido…
e pode implementar o equals para perguntar pelo id somente, para dizer se é igual ou não…

acredito que funcione…

Criado 12 de dezembro de 2011
Ultima resposta 12 de dez. de 2011
Respostas 8
Participantes 7