Spec-Zone .ru
спецификации, руководства, описания, API
|
T
- тип объектов, которые могут быть сравнены этим компаратором@FunctionalInterface public interface Comparator<T>
Collections.sort
или Arrays.sort
) позволить точное управление порядком сортировки. Компараторы могут также использоваться, чтобы управлять порядком определенных структур данных (такой как sorted sets
или sorted maps
), или обеспечить упорядочивание для наборов объектов, у которых нет a natural ordering
.Упорядочивание, наложенное компаратором, которому равняется c на ряде элементов, с которыми S, как говорят, является непротиворечивым, если и только если у c.compare(e1, e2)==0 есть то же самое булево значение как e1.equals(e2) для каждого e1 и e2 в S.
Предостережение должно быть осуществлено при использовании компаратора, способного к наложению упорядочивания, непоследовательного с, равняется, чтобы упорядочить сортированный набор (или сортированная карта). Предположите сортированный набор (или сортированная карта) с явным компаратором, c используется с элементами (или ключи) оттянутый из набора S. Если упорядочивание, наложенное c на S, непоследовательно с, равняется, сортированный набор (или сортированная карта) будет вести себя "странно". В особенности сортированный набор (или сортированная карта) нарушит общий контракт для набора (или карта), который определяется с точки зрения 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(Object)
метод (ы):{(x, y) such that x.equals(y)}.
В отличие от этого Comparable
, компаратор может дополнительно разрешить сравнение нулевых параметров, поддерживая требования для отношения эквивалентности.
Этот интерфейс является элементом Платформы Наборов Java.
Comparable
, Serializable
Модификатор и Тип | Метод и Описание |
---|---|
int |
compare(T o1, T o2)
Сравнивает его два параметра за порядок.
|
boolean |
equals(Object obj)
Указывает, " ли некоторый другой объект равен" этому компаратору.
|
default Comparator<T> |
reverseOrder()
Возвращает компаратор, который налагает обратное упорядочивание этого компаратора.
|
default Comparator<T> |
thenComparing(Comparator<? super T> other)
Создает лексикографический компаратор порядка с другим компаратором.
|
default <U extends Comparable<? super U>> |
thenComparing(Function<? super T,? extends U> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
Comparable ключ. |
default Comparator<T> |
thenComparing(ToDoubleFunction<? super T> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
double значение. |
default Comparator<T> |
thenComparing(ToIntFunction<? super T> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
int значение. |
default Comparator<T> |
thenComparing(ToLongFunction<? super T> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
long значение. |
int compare(T o1, T o2)
В предшествующем описании нотации sgn( expression) определяет математическую сигнум-функцию, которая определяется, чтобы возвратить один из -1, 0, или 1 согласно тому, отрицательно ли значение выражения, нуль или положительно.
Конструктор должен гарантировать что sgn(compare(x, y)) == -sgn(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 подразумевает что sgn(compare(x, z))==sgn(compare(y, z)) для всего z.
Это обычно имеет место, но не строго требуемое тот (compare(x, y)==0) == (x.equals(y)). Вообще говоря, любой компаратор, который нарушает это условие, должен ясно указать на этот факт. Рекомендуемый язык является "Примечанием: этот компаратор налагает упорядочивания, которые непоследовательны с, равняется."
o1
- первый объект, который будет сравнен.o2
- второй объект, который будет сравнен.NullPointerException
- если параметром является нуль, и этот компаратор не разрешает нулевые параметрыClassCastException
- если типы параметров препятствуют тому, чтобы они были сравнены этим компаратором.boolean equals(Object obj)
Object.equals(Object)
. Дополнительно, этот метод может возвратить true, только если указанный объект является также компаратором, и это налагает то же самое упорядочивание как этот компаратор. Таким образом, comp1.equals(comp2)
подразумевает что sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2)) для каждой ссылки на объект o1 и o2.Отметьте, что всегда безопасно не переопределить Object.equals(Object). Однако, переопределение этого метода может, в некоторых случаях, улучшить производительность, позволяя программы решить, что два отличных компаратора налагают тот же самый порядок.
equals
в class Object
obj
- ссылочный объект, с которым можно сравниться.true
только если указанный объект является также компаратором, и он налагает то же самое упорядочивание как этот компаратор.Object.equals(Object)
, Object.hashCode()
default Comparator<T> reverseOrder()
default Comparator<T> thenComparing(Comparator<? super T> other)
Comparator<Person> byLastName
может быть составлен с другим Comparator<Person> byFirstName
, тогда byLastName.thenComparing(byFirstName)
создает a Comparator<Person>
какие виды фамилией, и для равных видов фамилий именем.other
- другой компаратор, используемый, когда равняется на этом.NullPointerException
- если параметром является нуль.default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor)
Comparable
ключ. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor))
.U
- Comparable
введите для сравненияkeyExtractor
- функция, используемая, чтобы извлечь Comparable
ключ сортировкиNullPointerException
- если параметром является нуль.Comparators.comparing(Function)
, thenComparing(Comparator)
default Comparator<T> thenComparing(ToIntFunction<? super T> keyExtractor)
int
значение. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor))
.keyExtractor
- функция, используемая, чтобы извлечь целочисленное значениеNullPointerException
- если параметром является нуль.Comparators.comparing(ToIntFunction)
, thenComparing(Comparator)
default Comparator<T> thenComparing(ToLongFunction<? super T> keyExtractor)
long
значение. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor))
.keyExtractor
- функция, используемая, чтобы извлечь длинное значениеNullPointerException
- если параметром является нуль.Comparators.comparing(ToLongFunction)
, thenComparing(Comparator)
default Comparator<T> thenComparing(ToDoubleFunction<? super T> keyExtractor)
double
значение. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor))
.keyExtractor
- функция, используемая, чтобы извлечь двойное значениеNullPointerException
- если параметром является нуль.Comparators.comparing(ToDoubleFunction)
, thenComparing(Comparator)
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92