Сравните два списка объектов в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сравните два списка объектов в Java

Сообщение Anonymous »

Мне нужна помощь с проблемой, с которой я столкнулся при сравнении двух списков объектов (тип TestFoo). Цель состоит в том, чтобы проверить, равны ли оба списка.
Цель:
Мне нужно сравнить существующие и новые элементы (оба типа TestFoo) с определить, содержат ли они одинаковое содержимое или нет.
Что я делаю:
Как существующие ESItems, так и новые элементы преобразуются в отсортированные наборы (SortedSet).
Я использую компаратор для сортировки этих наборов на основе свойства uniqueItemDetailId.
После сортировки я сравниваю наборы с помощью .equals().
Однако, хотя списки содержат разные значения, сравнение (sortedExistingESItems.equals(sortedNewESItems)) не запускает блок if, и код ведет себя не так, как ожидалось.
Comparator budgetItemComparator = Comparator.comparing(TestFoo::getUniqueItemDetailId);

SortedSet sortedExistingESItems = new TreeSet(itemComparator);
sortedExistingESItems.addAll(existingESItems);

SortedSet sortedNewESItems = new TreeSet(budgetItemComparator);
sortedNewESItems.addAll(newItems);

if (!sortedExistingESItems.equals(sortedNewESItems)) {
finalSavingTestFooItems.addAll(newItems);
testFooRepository.deleteAll(existingESItems);
}

Вот скелет класса TestFoo:
public class TestFoo {
@Id
private String id;
@Field(type = Keyword)
private String uniqueId;
@Field(type = Keyword)
private String uniqueIdDetailId;
@Field(type = Keyword)
private String uniqueIdSyncGuId;
@Field(type = Keyword, index = false)
private String name;
@Field(type = Keyword)
private String yearId;
@Field(type = Keyword)
private Set types;
@Field(type = Keyword)
private Set managers;
@Field(type = Nested, includeInParent = true)
private Set hierarchies;
@Field(type = Nested, includeInParent = true)
private Set teamMembers;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestFoo that = (TestFoo) o;
return Objects.equals(uniqueId, that.uniqueId) &&
Objects.equals(uniqueIdDetailId, that.uniqueIdDetailId) &&
Objects.equals(uniqueIdSyncGuId, that.uniqueIdSyncGuId) &&
Objects.equals(name, that.name) &&
Objects.equals(yearId, that.yearId) &&
Objects.equals(types, that.types) &&
Objects.equals(managers, that.managers) &&
Objects.equals(hierarchies, that.hierarchies) &&
Objects.equals(teamMembers, that.teamMembers);
}

@Override
public int hashCode() {
return Objects.hash(uniqueId, uniqueIdDetailId, uniqueIdSyncGuId, name, yearId, types, managers, hierarchies, teamMembers);
}
}



Подробнее здесь: https://stackoverflow.com/questions/792 ... ts-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»