Java 8: сравнить элементы в Arraylist - PullRequest
0 голосов
/ 04 июня 2018

у меня ArrayList из студентов :Как я могу эффективно сравнить все элементы в списке, чтобы убедиться, что два элемента не имеют одинаковое значение ssn или lName?

ArrayList<Student> students = getStudents();

public class Student { 
    private String id;
    private String fName;
    private String lName;
    private String ssn;
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы можете построить карту с ключом ssn.Здесь Collectors.toMap выдаст IllegalStateException, если встретит дубликаты

students
      .stream()
      .collect(Collectors.toMap(Student::getSsn, Function.identity()));

Или вы можете обработать это в функции слияния

students
        .stream()
        .collect(Collectors.toMap(Student::getSsn, Function.identity(), (student1, student2) -> {
                System.out.println(student1 + " and " + student2 + " had duplicate SSNs");
                return student1; //Just for demonstration I'm returning the first one.
            }));

Вышеуказанное поможет вам определить дублирует, но вы не упомянули, что делать после этого.

РЕДАКТИРОВАТЬ (на основе обновления к вопросу):

.. но янеобходимо убедиться, что значения lName тоже уникальны

Вы можете сделать это дважды - один раз для SSN и один раз для фамилии.

Или вы можете переопределить equals и hashCode как показано в другом ответе.

0 голосов
/ 04 июня 2018

Вам необходимо переопределить методы equals () и hashcode () в классе Student для метода Different () Stream API.

students.stream().distinct().collect(Collectors.toList());
...