Spec-Zone.ru › OpenJDK 21

Интерфейс Comparator<T>

Параметры типа:
T - тип объектов, которые могут быть сравнены с помощью этого компаратора
Все известные реализующие классы:
Collator, RuleBasedCollator
Функциональный интерфейс:
Это функциональный интерфейс и, следовательно, может использоваться в качестве целевого назначения для лямбда-выражения или ссылки на метод.
@FunctionalInterface public interface Comparator<T>
Функция сравнения, которая накладывает полный порядок на некоторую коллекцию объектов. Компараторы могут передаваться методу сортировки (такому как Collections.sort или Arrays.sort), чтобы обеспечить точный контроль над порядком сортировки. Компараторы также могут использоваться для управления порядком определенных структур данных (таких как упорядоченные множества или упорядоченные отображения), или для задания порядка для коллекций объектов, у которых нет естественного порядка.

Порядок, накладываемый компаратором c на набор элементов S считается совместимым с equals тогда и только тогда, когда c.compare(e1, e2)==0 имеет то же булево значение, что и e1.equals(e2) для каждого e1 и e2 в S.

Следует проявлять осторожность при использовании компаратора, способного наложить порядок, несовместимый с equals, для упорядочения упорядоченного множества (или упорядоченного отображения). Предположим, что упорядоченное множество (или упорядоченное отображение) с явным компаратором c используется с элементами (или ключами) из множества S. Если порядок, наложенный c на S несовместим с equals, упорядоченное множество (или упорядоченное отображение) будет вести себя «странно». В частности, упорядоченное множество (или упорядоченное отображение) будет нарушать общий контракт для множества (или отображения), который определяется в терминах equals.

Например, предположим, что мы добавляем два элемента a и b, такие что (a.equals(b) && c.compare(a, b) != 0) в пустое TreeSet с компаратором c. Вторая операция add вернет true (и размер дерева множества увеличится), потому что a и b не эквивалентны с точки зрения дерева множества, даже несмотря на то, что это противоречит спецификации метода Set.add.

Примечание: в целом, рекомендуется, чтобы компараторы также реализовывали java.io.Serializable, поскольку они могут использоваться как методы упорядочения в сериализуемых структурах данных (таких как TreeSet, TreeMap). Для успешной сериализации структуры данных компаратор (если он предоставлен) должен реализовывать Serializable.

Для математически настроенных, отношение, определяющее наложенный порядок, который заданный компаратор c накладывает на заданный набор объектов S:

       {(x, y) such that c.compare(x, y) <= 0}.
 
Коэффициент частного для этого полного порядка:
       {(x, y) such that c.compare(x, y) == 0}.
 
Непосредственно следует из контракта для compare, что частное является отношением эквивалентности на S, и что наложенный порядок является полным порядком на S. Когда мы говорим, что порядок, наложенный c на S совместим с equals, мы имеем в виду, что частное для порядка — это отношение эквивалентности, определённое методами объектов equals(Object):
     {(x, y) such that x.equals(y)}. 
Другими словами, когда наложенный порядок совместим с equals, классы эквивалентности, определённые отношением эквивалентности метода equals, и классы эквивалентности, определённые частным метода compare метода, совпадают.

В отличие от Comparable, компаратор может необязательно разрешать сравнение нулевых аргументов, сохраняя при этом требования к отношению эквивалентности.

Этот интерфейс является членом Java Collections Framework.

С:
1.2
См. также:
  • Comparable
  • Serializable

Краткое описание методов

Модификатор и тип Метод Описание
int compare(T o1, T o2)
Сравнивает свои два аргумента по порядку.
static <T, U extends Comparable<? super U>>
Comparator<T>
comparing(Function<? super T,? extends U> keyExtractor)
Принимает функцию, которая извлекает Comparable ключ сортировки из типа T, и возвращает Comparator<T>, который сравнивает по этому ключу сортировки.
static <T, U> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
Принимает функцию, которая извлекает ключ сортировки из типа T, и возвращает Comparator<T> , который сравнивает по этому ключу сортировки, используя указанный Comparator.
static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает double ключ сортировки из типа T, и возвращает Comparator<T> , который сравнивает по этому ключу сортировки.
static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает int ключ сортировки из типа T, и возвращает Comparator<T> , который сравнивает по этому ключу сортировки.
static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает long ключ сортировки из типа T, и возвращает Comparator<T> , который сравнивает по этому ключу сортировки.
boolean equals(Object obj)
Указывает, является ли какой-либо другой объект «равным» этому компаратору.
static <T extends Comparable<? super T>>
Comparator<T>
naturalOrder()
Возвращает компаратор, который сравнивает объекты Comparable в естественном порядке.
static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator)
Возвращает компаратор, дружественный к null, который рассматривает null как меньший, чем не null.
static <T> Comparator<T> nullsLast(Comparator<? super T> comparator)
Возвращает компаратор, дружественный к null, который рассматривает null как больший, чем не null.
default Comparator<T> reversed()
Возвращает компаратор, который накладывает обратный порядок этого компаратора.
static <T extends Comparable<? super T>>
Comparator<T>
reverseOrder()
Возвращает компаратор, который накладывает обратный порядок естественного порядка.
default Comparator<T> thenComparing(Comparator<? super T> other)
Возвращает компаратор лексикографического порядка с другим компаратором.
default <U extends Comparable<? super U>>
Comparator<T>
thenComparing(Function<? super T,? extends U> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает Comparable ключ сортировки.
default <U> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает ключ для сравнения с заданным Comparator.
default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает double ключ сортировки.
default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает int ключ сортировки.
default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает long ключ сортировки.

Краткое описание методов

compare

int compare(T o1, T o2)
Сравнивает два аргумента для определения порядка. Возвращает отрицательное целое число, ноль или положительное целое число в зависимости от того, меньше ли, равно или больше первый аргумент, чем второй.

Разработчик должен обеспечить, чтобы signum(compare(x, y)) == -signum(compare(y, x)) для всех x и y. (Это подразумевает, что compare(x, y) должен вызывать исключение тогда и только тогда, когда compare(y, x) вызывает исключение.)

Разработчик должен также обеспечить транзитивность отношения: ((compare(x, y)>0) && (compare(y, z)>0)) подразумевает compare(x, z)>0.

Наконец, разработчик должен обеспечить, чтобы compare(x, y)==0 подразумевало, что signum(compare(x, z))==signum(compare(y, z)) для всех z.

API Примечание:
В общем случае, но не строго обязательно, что (compare(x, y)==0) == (x.equals(y)). В общем, любой компаратор, нарушающий это условие, должен четко указывать на этот факт. Рекомендуемый язык: "Примечание: этот компаратор накладывает порядок, несовместимый с equals".
Параметры:
o1 - первый объект для сравнения.
o2 - второй объект для сравнения.
Возвращает:
отрицательное целое число, ноль или положительное целое число в зависимости от того, меньше ли, равно или больше первый аргумент, чем второй.
Исключения:
NullPointerException - если аргумент равен null, а этот компаратор не допускает нулевых аргументов
ClassCastException - если типы аргументов препятствуют их сравнению этим компаратором.

equals

boolean equals(Object obj)
Указывает, является ли какой-либо другой объект "равным" этому компаратору. Этот метод должен подчиняться общему контракту Object.equals(Object). Кроме того, этот метод может возвращать true только если указанный объект также является компаратором и накладывает тот же порядок, что и этот компаратор. Таким образом, comp1.equals(comp2) подразумевает, что signum(comp1.compare(o1, o2))==signum(comp2.compare(o1, o2)) для каждой ссылки на объект o1 и o2.

Обратите внимание, что всегда безопасно не переопределять Object.equals(Object). Однако переопределение этого метода может в некоторых случаях повысить производительность, позволяя программам определить, что два разных компаратора накладывают один и тот же порядок.

Переопределяет:
equals в классе Object
Параметры:
obj - объектная ссылка для сравнения.
Возвращает:
true только если указанный объект также является компаратором и накладывает тот же порядок, что и этот компаратор.
См. также:
  • Object.equals(Object)
  • Object.hashCode()

reversed

default Comparator<T> reversed()
Возвращает компаратор, который накладывает обратный порядок этого компаратора.
Возвращает:
компаратор, который накладывает обратный порядок этого компаратора.
С версии:
1.8

thenComparing

default Comparator<T> thenComparing(Comparator<? super T> other)
Возвращает компаратор лексикографического порядка с другим компаратором. Если этот Comparator считает два элемента равными, т. е. compare(a, b) == 0, other используется для определения порядка.

Возвращаемый компаратор сериализуем, если указанный компаратор также сериализуем.

API Примечание:
Например, для сортировки коллекции String по длине, а затем по регистронезависимому естественному порядку, компаратор можно составить с помощью следующего кода,

     Comparator<String> cmp = Comparator.comparingInt(String::length)
             .thenComparing(String.CASE_INSENSITIVE_ORDER);
 
Параметры:
other - другой компаратор, который будет использоваться, когда этот компаратор сравнивает два равных объекта.
Возвращает:
компаратор лексикографического порядка, составленный из этого и затем другого компаратора
Исключения:
NullPointerException - если аргумент равен null.
С версии:
1.8

thenComparing

default <U> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает ключ для сравнения с заданным Comparator.
Требования к реализации:
Эта реализация по умолчанию работает так, как будто thenComparing(comparing(keyExtractor, cmp)).
Параметры типа:
U - тип ключа сортировки
Параметры:
keyExtractor - функция, используемая для извлечения ключа сортировки
keyComparator - Comparator, используемый для сравнения ключа сортировки
Возвращает:
компаратор лексикографического порядка, составленный из этого компаратора, а затем сравнение по ключу, извлеченному функцией keyExtractor
Исключения:
NullPointerException - если любой из аргументов равен null.
С версии:
1.8
См. также:
  • comparing(Function, Comparator)
  • thenComparing(Comparator)

thenComparing

default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает ключ сортировки Comparable.
Требования к реализации:
Эта реализация по умолчанию работает так, как будто thenComparing(comparing(keyExtractor)).
Параметры типа:
U - тип ключа сортировки Comparable
Параметры:
keyExtractor - функция, используемая для извлечения ключа сортировки Comparable
Возвращает:
компаратор лексикографического порядка, составленный из этого и затем ключа сортировки Comparable.
Исключения:
NullPointerException - если аргумент равен null.
С версии:
1.8
См. также:
  • comparing(Function)
  • thenComparing(Comparator)

thenComparingInt

default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает ключ сортировки int.
Требования к реализации:
Эта реализация по умолчанию работает так, как будто thenComparing(comparingInt(keyExtractor)).
Параметры:
keyExtractor - функция, используемая для извлечения ключа сортировки целого числа
Возвращает:
компаратор лексикографического порядка, составленный из этого и затем ключа сортировки int
Исключения:
NullPointerException - если аргумент равен null.
С версии:
1.8
См. также:
  • comparingInt(ToIntFunction)
  • thenComparing(Comparator)

thenComparingLong

default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает ключ сортировки long.
Требования к реализации:
Эта реализация по умолчанию работает так, как будто thenComparing(comparingLong(keyExtractor)).
Параметры:
keyExtractor - функция, используемая для извлечения ключа сортировки длинного целого числа
Возвращает:
компаратор лексикографического порядка, составленный из этого и затем ключа сортировки long
Исключения:
NullPointerException - если аргумент равен null.
С версии:
1.8
См. также:
  • comparingLong(ToLongFunction)
  • thenComparing(Comparator)

thenComparingDouble

default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
Возвращает компаратор лексикографического порядка с функцией, которая извлекает ключ сортировки double.
Требования к реализации:
Эта реализация по умолчанию работает так, как будто thenComparing(comparingDouble(keyExtractor)).
Параметры:
keyExtractor - функция, используемая для извлечения ключа сортировки с плавающей точкой двойной точности
Возвращает:
компаратор лексикографического порядка, составленный из этого и затем ключа сортировки double
Исключения:
NullPointerException - если аргумент равен null.
С версии:
1.8
См. также:
  • comparingDouble(ToDoubleFunction)
  • thenComparing(Comparator)

reverseOrder

static <T extends Comparable<? super T>> Comparator<T> reverseOrder()
Возвращает компаратор, который накладывает обратный естественный порядок.

Возвращаемый компаратор сериализуем и вызывает NullPointerException при сравнении null.

Параметры типа:
T - тип Comparable элемента для сравнения
Возвращает:
компаратор, который накладывает обратный естественный порядок на объекты Comparable.
С версии:
1.8
См. также:
  • Comparable

naturalOrder

static <T extends Comparable<? super T>> Comparator<T> naturalOrder()
Возвращает компаратор, который сравнивает объекты Comparable в естественном порядке.

Возвращаемый компаратор сериализуем и выбрасывает NullPointerException при сравнении null.

Type Parameters:
T - тип элемента Comparable для сравнения
Returns:
компаратор, который накладывает естественный порядок на объекты Comparable.
Since:
1.8
See Also:
  • Comparable

nullsFirst

static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator)
Возвращает компаратор, дружественный к значениям null, который считает значения null меньше, чем не-null. При условии, что оба значения являются null, они считаются равными. Если оба значения не null, для определения порядка используется указанный Comparator. Если указанный компаратор является null, возвращаемый компаратор считает все ненулевые значения равными.

Возвращаемый компаратор сериализуем, если указанный компаратор сериализуем.

Type Parameters:
T - тип элементов для сравнения
Parameters:
comparator - компаратор для сравнения ненулевых значений
Returns:
компаратор, который считает null меньше, чем не-null, и сравнивает не-null объекты с помощью предоставленного Comparator.
Since:
1.8

nullsLast

static <T> Comparator<T> nullsLast(Comparator<? super T> comparator)
Возвращает компаратор, дружественный к значениям null, который считает значения null больше, чем не-null. При условии, что оба значения являются null, они считаются равными. Если оба значения не null, для определения порядка используется указанный Comparator. Если указанный компаратор является null, возвращаемый компаратор считает все ненулевые значения равными.

Возвращаемый компаратор сериализуем, если указанный компаратор сериализуем.

Type Parameters:
T - тип элементов для сравнения
Parameters:
comparator - компаратор для сравнения ненулевых значений
Returns:
компаратор, который считает null больше, чем не-null, и сравнивает не-null объекты с помощью предоставленного Comparator.
Since:
1.8

comparing

static <T, U> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
Принимает функцию, которая извлекает ключ сортировки из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки, используя указанный Comparator.

Возвращаемый компаратор сериализуем, если указанная функция и компаратор оба сериализуемы.

API Note:
Например, чтобы получить компаратор, сравнивающий объекты Person по фамилии, игнорируя различия в регистре,

     Comparator<Person> cmp = Comparator.comparing(
             Person::getLastName,
             String.CASE_INSENSITIVE_ORDER);
 
Type Parameters:
T - тип элемента для сравнения
U - тип ключа сортировки
Parameters:
keyExtractor - функция, используемая для извлечения ключа сортировки
keyComparator - компаратор, используемый для сравнения ключа сортировки
Returns:
компаратор, который сравнивает по извлеченному ключу, используя указанный Comparator
Throws:
NullPointerException - если какой-либо из аргументов равен null
Since:
1.8

comparing

static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
Принимает функцию, которая извлекает ключ сортировки Comparable из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки.

Возвращаемый компаратор сериализуем, если указанная функция также сериализуема.

API Note:
Например, чтобы получить компаратор, сравнивающий объекты Person по фамилии,

     Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
 
Type Parameters:
T - тип элемента для сравнения
U - тип ключа сортировки
Parameters:
keyExtractor - функция, используемая для извлечения ключа сортировки Comparable
Returns:
компаратор, который сравнивает по извлеченному ключу
Throws:
NullPointerException - если аргумент равен null
Since:
1.8

comparingInt

static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает целочисленный ключ сортировки из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки.

Возвращаемый компаратор сериализуем, если указанная функция также сериализуема.

Type Parameters:
T - тип элемента для сравнения
Parameters:
keyExtractor - функция, используемая для извлечения целочисленного ключа сортировки
Returns:
компаратор, который сравнивает по извлеченному ключу
Throws:
NullPointerException - если аргумент равен null
Since:
1.8
See Also:
  • comparing(Function)

comparingLong

static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает целочисленный ключ сортировки типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки.

Возвращаемый компаратор сериализуем, если указанная функция также сериализуема.

Type Parameters:
T - тип элемента для сравнения
Parameters:
keyExtractor - функция, используемая для извлечения длинного ключа сортировки
Returns:
компаратор, который сравнивает по извлеченному ключу
Throws:
NullPointerException - если аргумент равен null
Since:
1.8
See Also:
  • comparing(Function)

comparingDouble

static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает вещественный ключ сортировки из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки.

Возвращаемый компаратор сериализуем, если указанная функция также сериализуема.

Type Parameters:
T - тип элемента для сравнения
Parameters:
keyExtractor - функция, используемая для извлечения вещественного ключа сортировки
Returns:
компаратор, который сравнивает по извлеченному ключу
Throws:
NullPointerException - если аргумент равен null
Since:
1.8
See Also:
  • comparing(Function)

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Comparator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API