Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Comparator.thenComparing()

Добавляет второй критерий сортировки — для объектов, равных по первому.

Доступно с: Java 8

Синтаксис

default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T, ? extends U> keyExtractor)

Параметры

ПараметрТипОписание
keyExtractorFunction<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 и сортировка по нескольким полям.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.