Encodera

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

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

Справочник Java

Comparator.comparing()

Создаёт компаратор, который сравнивает объекты по одному полю.

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

Синтаксис

static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> keyExtractor)

Параметры

ПараметрТипОписание
keyExtractorFunction<T, U>Функция, которая достаёт ключ сравнения, обычно ссылка на метод вроде Person::age.

Возвращаемое значение

Comparator<T>Компаратор для sort(), min(), max(), TreeMap.

Примеры

Сортировка по возрасту и по имени:

record Person(String name, int age) {}
 
void main() {
    var people = new ArrayList<>(List.of(
            new Person("Oleg", 35), new Person("Anna", 28), new Person("Maria", 31)));
    people.sort(Comparator.comparing(Person::age));
    IO.println(people);
    people.sort(Comparator.comparing(Person::name));
    IO.println(people);
}

Результат:

[Person[name=Anna, age=28], Person[name=Maria, age=31], Person[name=Oleg, age=35]]
[Person[name=Anna, age=28], Person[name=Maria, age=31], Person[name=Oleg, age=35]]

Компаратор в max() и для чисел — comparingInt():

record Person(String name, int age) {}
 
void main() {
    var people = List.of(new Person("Oleg", 35), new Person("Anna", 28));
    var oldest = people.stream().max(Comparator.comparingInt(Person::age)).get();
    IO.println(oldest.name());
}

Результат:

Oleg

Примечания

Для ключей-примитивов есть comparingInt(), comparingLong(), comparingDouble() — они не упаковывают числа в объекты. Если ключ может быть null, оберните сравнение: comparing(Person::city, Comparator.nullsLast(Comparator.naturalOrder())).

См. также

  • Comparator.thenComparing() — Добавляет второй критерий сортировки — для объектов, равных по первому.
  • Comparator.reversed() — Возвращает компаратор с обратным порядком. Для естественного порядка есть Comparator.reverseOrder().
  • Comparable.compareTo() — Задаёт естественный порядок объектов класса — по нему работают sort() и TreeSet.
  • Arrays.sort() — Сортирует массив на месте — по возрастанию или по заданному компаратору.
  • List.sort() — Сортирует список на месте по заданному правилу.

Вопросы и ответы по теме

В учебнике

  • Сортировка и компараторы — Сортировка коллекций в Java: естественный порядок, обратный порядок, интерфейс Comparable, Comparator.comparing и сортировка по нескольким полям.

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

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