Ответ
Интерфейс Comparator<T> используется для определения альтернативных (произвольных) правил сортировки объектов, отличных от их естественного порядка, или для сортировки объектов классов, не реализующих Comparable.
Для чего нужен:
- Сортировка объектов по разным критериям (например, сортировка
Personпо имени, зарплате, дате найма). - Сортировка объектов классов, которые вы не можете изменить (например, классов из сторонних библиотек).
- Определение порядка, противоположного естественному.
Пример реализации:
// Компаратор для сортировки Person по имени
public class NameComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
// Компаратор для сортировки по убыванию возраста (лямбда)
Comparator<Person> byAgeDesc = (p1, p2) -> Integer.compare(p2.getAge(), p1.getAge());
// Использование:
List<Person> people = new ArrayList<>();
// ... добавление людей
Collections.sort(people, new NameComparator()); // Сортировка по имени
people.sort(byAgeDesc); // Сортировка по убыванию возраста (Java 8+)
Ключевое отличие от Comparable: Comparator — это внешняя, гибкая стратегия сравнения, которую можно создавать в любом количестве вариантов.