Ответ
ComparatorComparable).
Основные сценарии использования:
- Сортировка объектов по нестандартным критериям
- Создание нескольких различных порядков сортировки для одного класса
- Сравнение объектов классов, которые не реализуют
Comparable
Пример: Сортировка пользователей по разным полям
class User {
String name;
int age;
}
// Компаратор по имени
Comparator<User> byName = Comparator.comparing(u -> u.name);
// Компаратор по возрасту (обратный порядок)
Comparator<User> byAgeDesc = (u1, u2) -> u2.age - u1.age;
// Комбинированный компаратор (сначала по возрасту, потом по имени)
Comparator<User> byAgeThenName = Comparator
.comparingInt((User u) -> u.age)
.thenComparing(u -> u.name);
List<User> users = ...;
users.sort(byAgeThenName); // Сортировка с использованием компаратора
Ключевые отличия от Comparable: |
Comparable |
Comparator |
|---|---|---|
| Определяет естественный порядок | Определяет альтернативный порядок | |
Метод compareTo() внутри класса |
Метод compare() вне класса |
|
| Изменяет исходный класс | Не требует изменения исходного класса | |
| Одна логика сравнения на класс | Много логик сравнения на класс |
Современный стиль (Java 8+): Используйте фабричные методы Comparator.comparing(), thenComparing() для создания цепочек сравнения.