Я рассматривал примеры реализации интерфейса Comparable vs Comparator.
Но я застрял на одном этапе его реализации:
Предположим, у меня есть простой класс: Сотрудник, у которого есть механизм сортировки по умолчанию, основанный на имени сотрудника.
public class Employee implements Comparable<Employee> {
private int empSalary;
private String empName;
@Override
public int compareTo(Employee e) {
return this.empName.compareTo(e.empName);
}
}
Но, допустим, мне нужно сначала отсортировать по имени сотрудника, а затем, если у двух сотрудников одинаковое имя, я должен отсортировать их по их зарплате.
Итак, я написал собственный компаратор для сортировки по зарплате, как показано ниже.
public class SalaryComparator implements Comparator<Employee> {
@Override
public int compare(Employee e1, Employee e2) {
return e1.empSalary - e2.empSalary;
}
}
Но когда я запустил свой тестовый класс для сортировки сначала по имени, а затем по зарплате, результат оказался не таким, как ожидалось.
Collections.sort(employeeList, new SalaryComparator());
Порядок ввода:
Name : Kumar, Salary : 40
Name : Sanket, Salary : 10
Name : Kumar, Salary : 20
Ожидаемый результат:
Name : Kumar, Salary : 20
Name : Kumar, Salary : 40
Name : Sanket, Salary : 10
Фактический результат:
Name : Sanket, Salary : 10 // incorrect order
Name : Kumar, Salary : 20
Name : Kumar, Salary : 40