У меня есть тип OBJ MyObj
следующим образом:разница между 2 списками объектов в Java
class MyObj{
String id;
String username;
String fullName;
String age;
//getters & setters
}
Предположим, что у нас есть 2 списков, содержащих различное число элементов, как так:
List<MyObj> listA
List<MyObj> listB
У меня есть который обнаруживает элементы от listA
, отсутствующие в listB
:
public static <T> List<T> getListDifference(List<T> list1, List<T> list2) {
Collection<T> first = new HashSet<T>(list1);
Collection<T> second = new HashSet<T>(list2);
first.removeAll(second);
return new ArrayList<T>(first);
}
Если у объектов от listA
и listB
есть те же поля для всех предметов, все работает отлично.
Проблема заключается в том, что некоторые пункты есть только id
и username
но другие могут иметь fullName
или age
тоже, и в результате этот метод больше не работает. Я хотел бы придерживаться той же логики, учитывая только поле id
, потому что оно присутствует во всех объектах.
Один очевидный способ скопировать id
только поле объекта в другой List<String>
и работать с полученными списками для обнаружения элементов, а затем просто искать OBJ из обоих списков по id
. Этот метод имеет большую сложность из-за множества итераций. Есть ли короткий путь для достижения этого?
переопределить 'MyObj # equals' и' MyObj # hashCode' – SomeJavaGuy
Я думаю, что вопрос вообще не связан с Android. – Steeve