listas - Android: compare dos ArrayList de objetos y encuentre identificadores que no coinciden con el segundo ArrayList
comprar objetos en java (3)
Quiero comparar dos ArrayList de objetos y encontrar los valores que no coinciden desde el segundo ArrayList basado en los identificadores en el objeto.
Por ejemplo:
Person.java
private int id;
private String name;
private String place;
MainActivity.java:
ArrayList<Person> arrayList1 = new ArrayList<Person>();
arrayList1.add(new Person(1,"name","place"));
arrayList1.add(new Person(2,"name","place"));
arrayList1.add(new Person(3,"name","place"));
ArrayList<Person> arrayList2 = new ArrayList<Person>();
arrayList2.add(new Person(1,"name","place"));
arrayList2.add(new Person(3,"name","place"));
arrayList2.add(new Person(5,"name","place"));
arrayList2.add(new Person(6,"name","place"));
Quiero comparar el arrayList1, arrayList2 y necesito encontrar los valores que no coinciden desde el arrayList2. Necesito los valores de id 5,6.
¿Cómo puedo hacer esto?
Debería recorrer el ArrayList más corto que tenga, así que verifique qué lista es más corta y luego itere a través de todos los índices en esa lista contra cada índice en la otra lista.
(Esto supone que no tiene ningún duplicado en ninguna de las listas. Si lo hace, es posible que desee devolver una lista de todos los índices encontrados).
Mira las modificaciones a la clase de persona
public static class Person{
//setters and getters
@Override
public boolean equals(Object other) {
if (!(other instanceof Person)) {
return false;
}
Person that = (Person) other;
// Custom equality check here.
return this.getId() == that.getId();
}
}
Haber reemplazado iguales (Objeto otro)
entonces simplemente haz esto
for (Person person : arrayList1) {
arrayList2.remove(person);
}
su respuesta es la lista de arreglos 2, solo contendrá objetos impares
Puede usar un bucle interno para verificar si la Id. De la persona de arrayList2
corresponde a cualquier ID de Persona en el arrayList1
. Necesitará una bandera para marcar si se encontró alguna Persona.
ArrayList<Integer> results = new ArrayList<>();
// Loop arrayList2 items
for (Person person2 : arrayList2) {
// Loop arrayList1 items
boolean found = false;
for (Person person1 : arrayList1) {
if (person2.id == person1.id) {
found = true;
}
}
if (!found) {
results.add(person2.id);
}
}