Страницы

Поиск по вопросам

суббота, 23 марта 2019 г.

Нужен алгоритм сравнения кастомных объектов

Понадобилось сделать сравнение. Есть 2 листа объектов одного типа (field1 и field2 в примере). У объекта есть 3 строковых параметра (имя, фамилия, отчество). В первом объекте есть записи о 3-х людях со всеми заполненными полями, т.е. он выглядит примерно так:
Имя Фамилия Отчество Юрий Карамазин Александрович Виктор Сушко Григорьевич Саша Князев Альбертович
И второй объект, в котором записи о тех же 3-х людях, но хранятся только имена:
Имя Юрий Виктор Саша
Мне необходимо сравнивать только параметр объекта "имя". Пытаюсь сравнивать как-то так:
for (FieldOfTest x : field1) { for (FieldOfTest y : field2) { Assert.assertTrue(x.getName().equals(y.getName()), "First value: " + x.getName() + " , second value: " + y.getName()); } }
Второй for прокручивает полный список. Как мне сравнивать 1 объект из первого списка с одним объектом второго списка?


Ответ

Если сравнивать нужно только элементы, находящиеся на одинаковых индексах, то достаточно использовать один for, предварительно убедившись, что массивы равной длины:
public static void main(String[] args) { List field1 = new ArrayList<>(); field1.add(new FieldOfTest("Юрий", "Карамазин Александрович")); field1.add(new FieldOfTest("Виктор", "Сушко Григорьевич")); field1.add(new FieldOfTest("Саша", "Князев Альбертович")); List field2 = new ArrayList<>(); field2.add(new FieldOfTest("Юрий", null)); field2.add(new FieldOfTest("Виктор", null)); field2.add(new FieldOfTest("Саша", null)); System.out.println("Data is correct: " + isCorrectData(field1, field2)); }
private static boolean isCorrectData(List field1, List field2) { if (field1.size() != field2.size()) { return false; } boolean isCorrect = true; for (int i = 0; i < field1.size(); i++) { if (!field1.get(i).getName().equals(field2.get(i).getName())) { isCorrect = false; break; } } return isCorrect; }
Реализация на Java.

Комментариев нет:

Отправить комментарий