Dudas con métodos de collection

Hola experto, antes que nada agradezco tu disposición, mi consulta es la siguiente:

Estoy probando los métodos de Collection e Iterator. Para ello creo una aplicación en donde copio dos arreglos con objeto Paciente en dos arraylist. Esto lo realizo para que después mediante un método elimine del primer arraylist los objetos repetidos en el segundo.

Resulta que al pasar como argumento las dos colecciones, no me elimina el objeto repetido. Es decir, mi coleccion1 queda completa sin sufrir alteraciones. Mi código:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
*
* @author Administrador
*/
public class Main {
private final Paciente arreglo[] = {new Paciente(29,"Carlos","Sarabia"),new Paciente(28,"Yamila","Sanchez")};
private final Paciente arregloEliminar[] = {new Paciente(28,"Yamila","Sanchez")};
public Main()
{
//crea objeto ArrayList y se asignan sus referencias a un objeto List de tipo Paciente
List <Paciente> lista = new ArrayList <Paciente>();
List <Paciente> eliminarLista = new ArrayList <Paciente>();
//agrega los elementos de arreglo a lista
for(Paciente p :arreglo)
lista.add(p);
//agrega los elementos de arregloElimnar a eliminarLista
for(Paciente p: arregloEliminar)
eliminarLista.add(p);
System.out.println("ArrayList: ");
//imprime en pantalla el contenido de la lista
for(Paciente p : lista)
System.out.printf("Nro historia: %d\nNombre: %es\nApellido: %es\n", p.getNro_historia_clinica(),p.getNombre(),p.getApellido());
eliminarPaciente(lista,eliminarLista);
System.out.println("\n\nArrayList después de eliminarPaciente: ");
//imprime en pantalla el contenido de la lista
for(Paciente p:lista)
System.out.printf("Nro historia: %d\nNombre: %es\nApellido: %es\n", p.getNro_historia_clinica(),p.getNombre(),p.getApellido());
}
private void eliminarPaciente(Collection <Paciente> coleccion1, Collection <Paciente> coleccion2)
{
//obtiene el itrador para acceder a los elementos de lista (collecion1)
Iterator <Paciente> iterador = coleccion1.iterator();
//itera mientras la colección tenga elementos
while(iterador.hasNext())
{
//si el paciente existe en las dos colecciones lo elimina de la lista (coleccion1)
if(coleccion2.contains(iterador.next()))
iterador.remove();
}
}
public static void main(String[] args) {
Main m = new Main();
}
}

Desde ya muchas gracias!!!

Respuesta
1

El problema esta en el método contains, que compara si un determinado objeto esta en dos colecciones. El problema es que no puedes compararlos, por que aunque tengan los mismos datos, son objetos distintos y entonces la comparación falla siempre.

Tendrás que hacerlo comprobando uno de sus datos, por ejemplo la historia clínica (que puede funcionar como indice) y si coinciden lo eliminas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas