Comparator.comparing()
Создаёт компаратор, который сравнивает объекты по одному полю.
Доступно с: Java 8
Синтаксис
static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> keyExtractor)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| keyExtractor | Function<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 и сортировка по нескольким полям.