T - 可比较此比较器的对象类型
@FunctionalInterface public interface Comparator<T>
Collections.sort或Arrays.sort ),以便对排序顺序进行精确控制。
比较器还可以用来控制某些数据结构(如顺序sorted sets或sorted maps ),或对于不具有对象的集合提供的排序natural ordering 。
通过比较c上的一组元素S的确定的顺序对被认为是与equals一致当且仅当c.compare(e1, e2)==0具有用于S每e1和e2相同布尔值e1.equals(e2)。
当使用能够强制排序不一致的比较器时,应注意使用排序集(或排序图)。 假设具有显式比较器c的排序集(或排序映射)与从集合S中绘制的元素(或键) 一起使用 。 如果88446235254451上的c强制的排序与equals不一致,则排序集(或排序映射)将表现为“奇怪”。 特别是排序集(或排序图)将违反用于设置(或映射)的一般合同,其按equals定义。
例如,假设一个将两个元件a和b ,使得(a.equals(b) && c.compare(a, b) != 0)到空TreeSet与比较c 。 因为a和b与树集的角度不相等,所以第二个add操作将返回true(并且树集的大小将增加),即使这与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, 总订单 。
当我们说S上的c所规定的顺序与等于一致时,我们的意思是排序的商是由对象' equals(Object)方法定义的等价关系:
{(x, y) such that x.equals(y)}.
与Comparable不同,比较器可以可选地允许比较空参数,同时保持对等价关系的要求。
此接口是成员Java Collections Framework 。
Comparable , Serializable
| Modifier and Type | Method and Description |
|---|---|
int |
compare(T o1, T o2)
比较其两个参数的顺序。
|
static <T,U extends Comparable<? super U>> |
comparing(Function<? super T,? extends U> keyExtractor)
接受从类型 T中提取Comparable排序键的功能,并返回按该排序键进行比较的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)
接受从类型
T中提取
double排序键的功能,并返回一个
Comparator<T> ,该数据按该排序键进行比较。
|
static <T> Comparator<T> |
comparingInt(ToIntFunction<? super T> keyExtractor)
接受从类型
T中提取
int排序键的功能,并返回与该排序键进行比较的
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>> |
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>> |
reverseOrder()
返回一个与
自然排序相反的比较器。
|
default Comparator<T> |
thenComparing(Comparator<? super T> other)
用另一个比较器返回一个字典顺序比较器。
|
default <U extends Comparable<? super U>> |
thenComparing(Function<? super T,? extends U> keyExtractor)
返回具有提取
Comparable排序键的功能的
Comparable顺序比较器。
|
default <U> Comparator<T> |
thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
返回具有提取要与给定
Comparator进行比较的键的功能的字典顺序比较
Comparator 。
|
default Comparator<T> |
thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
返回具有提取
double排序键的功能的
double顺序比较器。
|
default Comparator<T> |
thenComparingInt(ToIntFunction<? super T> keyExtractor)
返回具有提取
int排序键的功能的
int顺序比较器。
|
default Comparator<T> |
thenComparingLong(ToLongFunction<? super T> keyExtractor)
返回具有提取
long排序键的功能的
long顺序比较器。
|
int compare(T o1, T o2)
在前面的描述中,符号sgn( ) 表达式表示数学符号函数,其定义根据表达式的值是否为负,零或正返回的-1一个,0,或1。
实现程序必须确保sgn(compare(x, y)) == -sgn(compare(y, x))所有x和y。 (这意味着当且仅当compare(y, x)引发异常时, compare(x, y)必须抛出异常。)
实施者还必须确保关系是可传递的: ((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在类别
Object
obj - 与之比较的参考对象。
true只有指定的对象也是一个比较器,并且它赋予与该比较器相同的顺序。
Object.equals(Object) ,
Object.hashCode()
default Comparator<T> reversed()
default Comparator<T> thenComparing(Comparator<? super T> other)
Comparator认为两个元件相等,即compare(a, b) == 0 , other被用来确定顺序。
如果指定的比较器也可串行化,则返回的比较器是可序列化的。
String基于长度和然后不区分大小写的自然顺序,比较器可使用下面的代码组成,
Comparator<String> cmp = Comparator.comparingInt(String::length) .thenComparing(String.CASE_INSENSITIVE_ORDER);
other - 当比较器比较两个相等的对象时要使用的另一个比较器。
NullPointerException - 如果参数为空。
default <U> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
Comparator进行比较的键的函数的词典顺序比较
Comparator 。
thenComparing(comparing(keyExtractor, cmp)) 。
U - 排序键的类型
keyExtractor - 用于提取排序键的函数
keyComparator -
Comparator用于比较排序键
NullPointerException - 如果任一参数为空。
comparing(Function, Comparator) ,
thenComparing(Comparator)
default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor)
Comparable排序键的功能的
Comparable顺序比较器。
thenComparing(comparing(keyExtractor)) 。
U - Comparable排序键的类型
keyExtractor - 用于提取Comparable排序键的功能
Comparable排序键。
NullPointerException - 如果参数为空。
comparing(Function) ,
thenComparing(Comparator)
default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor)
int排序键的功能的
int顺序比较器。
thenComparing(comparingInt(keyExtractor)) 。
keyExtractor - 用于提取整数排序键的函数
int排序键
NullPointerException - 如果参数为空。
comparingInt(ToIntFunction) ,
thenComparing(Comparator)
default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor)
long排序键的功能的
long顺序比较器。
thenComparing(comparingLong(keyExtractor)) 。
keyExtractor - 用于提取长排序键的函数
long排序键
NullPointerException - 如果参数为空。
comparingLong(ToLongFunction) ,
thenComparing(Comparator)
default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
double排序键的功能的
double顺序比较器。
thenComparing(comparingDouble(keyExtractor)) 。
keyExtractor - 用于提取双排序键的函数
double排序键
NullPointerException - 如果参数为空。
comparingDouble(ToDoubleFunction) ,
thenComparing(Comparator)
static <T extends Comparable<? super T>> Comparator<T> reverseOrder()
返回的比较器是可序列化,并引发NullPointerException比较时null 。
T - 要比较的Comparable类型的元素
Comparable对象施加了
自然排序的
Comparable 。
Comparable
static <T extends Comparable<? super T>> Comparator<T> naturalOrder()
Comparable对象的比较器 。
返回的比较器是可序列化,并引发NullPointerException比较时null 。
T - 要比较的Comparable类型的元素
Comparable对象施加
自然排序的
Comparable 。
Comparable
static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator)
null小于非空。
当两者都是null时,它们被认为是相等的。
如果两者都非空,则指定的Comparator被用来确定顺序。
如果指定的比较器是null ,则返回的比较器将所有非空值都认为是相等的。
如果指定的比较器可串行化,则返回的比较器是可序列化的。
T - 要比较的元素的类型
comparator - a
Comparator用于比较非空值
null小于非空,并与所提供的非空的对象进行比较
Comparator 。
static <T> Comparator<T> nullsLast(Comparator<? super T> comparator)
null设置为大于非空值。
当两者都是null时,它们被认为是相等的。
如果两者都非空,则指定的Comparator被用来确定顺序。
如果指定的比较器为null ,则返回的比较器将所有非空值都认为相等。
如果指定的比较器可串行化,则返回的比较器是可序列化的。
T - 要比较的元素的类型
comparator -一个
Comparator比较非空值
null为比非空时,并与所提供的非空的对象进行比较
Comparator 。
static <T,U> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
T ,并返回一个Comparator<T> ,通过使用指定的排序关键字进行比较Comparator 。
如果指定的功能和比较器都可串行化,则返回的比较器是可序列化的。
Comparator ,比较Person对象的姓氏忽略大小写差异,
Comparator<Person> cmp = Comparator.comparing( Person::getLastName, String.CASE_INSENSITIVE_ORDER);
T - 要比较的元素的类型
U - 排序键的类型
keyExtractor - 用于提取排序键的功能
keyComparator - 用于比较排序键的
Comparator
Comparator
NullPointerException - 如果任一参数为空
static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
Comparable从类型排序键T ,并返回一个Comparator<T>通过那种关键的。
如果指定的功能也可串行化,则返回的比较器是可序列化的。
Comparator比较Person对象的姓氏,
Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
T - 要比较的元素的类型
U -
Comparable排序键的类型
keyExtractor - 用于提取Comparable排序键的功能
NullPointerException - 如果参数为空
static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor)
int从类型分类键T ,并返回一个Comparator<T> ,通过该排序关键字进行比较。
如果指定的功能也可串行化,则返回的比较器是可序列化的。
T - 要比较的元素的类型
keyExtractor - 用于提取整数排序键的函数
NullPointerException - 如果参数为空
comparing(Function)
static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)
long从类型排序键T ,并返回一个Comparator<T>通过那种关键的。
如果指定的功能也可串行化,则返回的比较器是可序列化的。
T - 要比较的元素的类型
keyExtractor - 用于提取长排序键的函数
NullPointerException - 如果参数为空
comparing(Function)
static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)
double从类型排序键T ,并返回一个Comparator<T>通过那种关键的。
如果指定的功能也可串行化,则返回的比较器是可序列化的。
T - 要比较的元素的类型
keyExtractor - 用于提取双排序键的函数
NullPointerException - 如果参数为空
comparing(Function)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.