Многоуровневый компаратор - PullRequest
0 голосов
/ 19 января 2020

Подскажите, пожалуйста, самый простой способ реализации многоуровневого компаратора: у меня есть класс сотрудников, и я хочу сравнить их по зарплате, это делается с помощью компаратора:

public class SalaryComparator implements Comparator<Employee> {

    @Override
    public int compare(Employee o1, Employee o2) {
        return   (int) (o1.getSalary()-o2.getSalary());
    }
}

Сейчас если зарплата одинаковая, я хочу сравнить их по фамилии или ID

Как я могу это сделать?

Спасибо

1 Ответ

5 голосов
/ 19 января 2020

Вы можете использовать метод Comparator.thenComparing. Метод Comparator.comparing также упрощает это, поэтому вам не нужно писать собственные классы, реализующие Comparator:

Comparator<Employee> cmp = new SalaryComparator()
    .thenComparing(Comparator.comparing(Employee::getLastName))
    .thenComparing(Comparator.comparing(Employee::getID));

. Вы даже можете полностью исключить свой класс SalaryComparator:

Comparator<Employee> cmp = Comparator.comparing(Employee::getSalary)
    .thenComparing(Comparator.comparing(Employee::getLastName))
    .thenComparing(Comparator.comparing(Employee::getID));

Если ваши методы возвращают примитивные типы (например, если getSalary возвращает double), используйте, например, метод comparingDouble вместо comparing. Есть также comparingInt и comparingLong.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...