Spec-Zone.ru › OpenJDK 24

Интерфейс 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 меньше, чем ненулевой.
static <T> Comparator<T> nullsLast(Comparator<? super T> comparator)
Возвращает дружественный к нулю компаратор, который считает 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, cmp)).
Параметры типа:
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.

Type Parameters:
T - тип элемента, который должен быть сравнен, реализующий интерфейс Comparable
Returns:
компаратор, который накладывает обратный порядок сортировки по умолчанию на объекты Comparable.
Since:
1.8
See Also:
  • 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, используется указанный компаратор для определения порядка. Если указанный компаратор равен null, то возвращаемый компаратор считает все значения не null равными.

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

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

nullsLast

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

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

Type Parameters:
T - тип элементов, которые сравниваются
Parameters:
comparator - компаратор для сравнения значений, не равных null
Returns:
компаратор, который считает null большим, чем не-null, и сравнивает не-null объекты с помощью переданного компаратора.
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:
компаратор, который сравнивает по извлеченному ключу, используя указанный компаратор
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)
END_OF_DOCUMENT_MARKER

© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Comparator.html

Spec-Zone.ru

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