objetos objeto listas lista entre enlazadas comprar comparar comparaciones como arreglos android object arraylist compare pojo

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); } }