Spec-Zone.ru › OpenJDK 17

Интерфейс 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, компаратор может необязательно допускать сравнение аргументов null, сохраняя при этом требования к отношению эквивалентности.

Этот интерфейс является членом 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, и возвращает компаратор, который сравнивает по этому ключу сортировки.
static <T, U> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
Принимает функцию, которая извлекает ключ сортировки из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки, используя указанный Comparator.
static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает ключ сортировки double из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки.
static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает ключ сортировки int из типа T, и возвращает компаратор, который сравнивает по этому ключу сортировки.
static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)
Принимает функцию, которая извлекает ключ сортировки long из типа 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, и этот компаратор не допускает аргументов 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 - функция, используемая для извлечения ключа сортировки типа integer
Возвращаемое значение:
компаратор лексикографического порядка, составленный из этого и затем ключа сортировки int
Исключения:
NullPointerException - если аргумент равен null.
С версии:
1.8
См. также:
  • comparingInt(ToIntFunction)
  • thenComparing(Comparator)

thenComparingLong

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

thenComparingDouble

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

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

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

nullsLast

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

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

Type Parameters:
T - тип сравниваемых элементов
Parameters:
comparator - компаратор для сравнения не-null значений
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 - тип ключа Comparable сортировки
Parameters:
keyExtractor - функция, используемая для извлечения ключа сортировки Comparable
Returns:
компаратор, который сравнивает по извлеченному ключу
Throws:
NullPointerException - если аргумент равен null
Since:
1.8

comparingInt

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

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

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

© 1993, 2021, 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/17/docs/api/java.base/java/util/Comparator.html

Spec-Zone.ru

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