Comparator.thenComparing()
Добавляет второй критерий сортировки — для объектов, равных по первому.
Доступно с: Java 8
Синтаксис
default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T, ? extends U> keyExtractor)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| keyExtractor | Function<T, U> / Comparator<T> | Ключ второго уровня или готовый компаратор. |
Возвращаемое значение
Comparator<T>Новый составной компаратор.
Примеры
По отделу, затем по имени:
record Employee(String dept, String name) {}
void main() {
var staff = new ArrayList<>(List.of(
new Employee("IT", "Oleg"), new Employee("HR", "Maria"),
new Employee("IT", "Anna"), new Employee("HR", "Ivan")));
staff.sort(Comparator.comparing(Employee::dept).thenComparing(Employee::name));
staff.forEach(e -> IO.println(e.dept() + " " + e.name()));
}Результат:
HR Ivan
HR Maria
IT Anna
IT OlegПримечания
Цепочку можно продолжать: .thenComparing(...).thenComparing(...). Для чисел есть thenComparingInt(). Чтобы обратить только второй критерий, передайте компаратор: thenComparing(Employee::name, Comparator.reverseOrder()).
См. также
- Comparator.comparing() — Создаёт компаратор, который сравнивает объекты по одному полю.
- Comparator.reversed() — Возвращает компаратор с обратным порядком. Для естественного порядка есть Comparator.reverseOrder().
Вопросы и ответы по теме
В учебнике
- Сортировка и компараторы — Сортировка коллекций в Java: естественный порядок, обратный порядок, интерфейс Comparable, Comparator.comparing и сортировка по нескольким полям.