Мне нужна помощь с проблемой, с которой я столкнулся при сравнении двух списков объектов (тип TestFoo). Цель — обнаружить различия между списками, удалить несовпадающие элементы и выполнить необходимую очистку репозитория. Вот краткий обзор подхода, который я использую, и проблемы, с которой я сталкиваюсь:
Цель:
Мне нужно сравнить существующие элементы и newItems (оба типа TestFoo).
Что я делаю:
И существующие ESItems, и newItems преобразуются в отсортированные наборы (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);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestHigh {
@Field(type = Keyword)
private String code;
@Field(type = Keyword)
private Set values;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestHigh that = (TestHigh) o;
return Objects.equals(code, that.code) &&
Objects.equals(values, that.values)
}
@Override
public int hashCode() {
return Objects.hash(code, values);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestTeam {
@Field(type = Keyword)
private String teamMemberId;
@Field(type = Long)
private Long startDate;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestTeam that = (TestTeam) o;
return Objects.equals(teamMemberId, that.teamMemberId) &&
Objects.equals(startDate, that.startDate)
;
}
@Override
public int hashCode() {
return Objects.hash(teamMemberId, startDate);
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ts-in-java
Сравните два списка объектов в Java ⇐ JAVA
Программисты JAVA общаются здесь
1732876133
Anonymous
Мне нужна помощь с проблемой, с которой я столкнулся при сравнении двух списков объектов (тип TestFoo). Цель — обнаружить различия между списками, удалить несовпадающие элементы и выполнить необходимую очистку репозитория. Вот краткий обзор подхода, который я использую, и проблемы, с которой я сталкиваюсь:
Цель:
Мне нужно сравнить существующие элементы и newItems (оба типа TestFoo).
Что я делаю:
И существующие ESItems, и newItems преобразуются в отсортированные наборы (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);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestHigh {
@Field(type = Keyword)
private String code;
@Field(type = Keyword)
private Set values;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestHigh that = (TestHigh) o;
return Objects.equals(code, that.code) &&
Objects.equals(values, that.values)
}
@Override
public int hashCode() {
return Objects.hash(code, values);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestTeam {
@Field(type = Keyword)
private String teamMemberId;
@Field(type = Long)
private Long startDate;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TestTeam that = (TestTeam) o;
return Objects.equals(teamMemberId, that.teamMemberId) &&
Objects.equals(startDate, that.startDate)
;
}
@Override
public int hashCode() {
return Objects.hash(teamMemberId, startDate);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79236063/compare-two-list-of-objects-in-java[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия