T
-可以通过该比较器比较对象的类型
@FunctionalInterface public interface Comparator<T>
Collections.sort
或
Arrays.sort
)允许在排序顺序的精确控制。比较器也可以用来控制特定的数据结构顺序(如
sorted sets
或
sorted maps
),或提供的对象不集合排序有
natural ordering
。
订购的一组元素S比较器c强加说是符合等于当且仅当c.compare(e1, e2)==0具有相同的布尔值为S每e1和e2 e1.equals(e2)。
当使用一个能够施加与等于不一致的排序的比较器来订购一个排序的集合(或排序的Map)时,应谨慎使用。假设一个有序集合(或排序图)有一个明确的比较c使用元素(或键)从一组S得出。如果订购c强加在S是不平等的,排序的集合(或排序图)将表现“奇怪”。特别是有序集合(或排序图)将违反一般合同的集合(或Map),这是从equals定义。
例如,假设一个两个元素添加a
和b
这样(a.equals(b) && c.compare(a, b) != 0)
的c
空TreeSet
比较器。第二add
操作将返回true(和树的大小将增加,因为a
)和b
是不等价的从树的角度来看,即使这违背了Set.add
方法的规范。
注:这通常是比较好的想法也实现java.io.Serializable,他们可以在序列化数据结构排序方法(如TreeSet
,TreeMap
)。为了数据结构的序列化成功,比较器(如果提供的话)必须实现Serializable。
对于数学上的倾向,定义实施排序给定比较器c对给定的一组对象S是关系:
{(x,y),指(x,y)< = 0 }。这个总的顺序是:商
{(x,y),指(x,y)= = 0 }。紧随其后,从 compare商是 S一个等价关系合同,这是一个总序 S强加订购。当我们说订购 c强加在 S是符合等于,意味着我们的订货商由物体
equals(Object)
方法定义的等价关系(S):
{(x,y),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)
|
static <T,U> Comparator<T> |
comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator)
|
static <T> Comparator<T> |
comparingDouble(ToDoubleFunction<? super T> keyExtractor)
接受这一类型
T 提取物一
double 排序键的功能,并返回一个
Comparator<T> 比较的排序关键字。
|
static <T> Comparator<T> |
comparingInt(ToIntFunction<? super T> keyExtractor)
接受这一类型的
int 提取物
T 排序键的功能,并返回一个
Comparator<T> 比较的排序关键字。
|
static <T> Comparator<T> |
comparingLong(ToLongFunction<? super T> keyExtractor)
接受这一类型
T 提取物一
long 排序键的功能,并返回一个
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 排序关键字功能字典序比较。
|
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 排序关键字功能字典序比较。
|
int compare(T o1, T o2)
在前面描述的符号,sgn(表达)指定数学符号函数,其定义为返回一个-1,0,或1根据是否表达值为负,零或正。
实现者必须确保所有的x和y sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着compare(x, y)必须抛出一个异常,如果compare(y, x)抛出一个异常。)
实现者也必须确保关系是可传递的:((compare(x, y)>0) && (compare(y, z)>0))意味着compare(x, z)>0。
最后,作者必须保证compare(x, y)==0意味着所有z sgn(compare(x, z))==sgn(compare(y, z))。
这是一般的情况,但不严格要求(compare(x, y)==0) == (x.equals(y))。一般来说,任何违反此条件比较清楚地表明这一事实。推荐语是“注意:此比较器施加的顺序,不符合平等的。”
o1
要比较的第一个对象。
o2
要比第二对象。
NullPointerException
-如果一个参数为null,这比较不允许null参数
ClassCastException
如果参数的类型,防止该比较器的比较。
boolean equals(Object obj)
Object.equals(Object)
。此外,该方法可以指定对象是否是一个比较器,它规定相同的顺序返回
true只有这个比较器。因此,
comp1.equals(comp2)
意味着每一个对象的引用
o1和
o2
sgn(comp1.compare(o1, o2))==sgn(comp2.compare(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
提取物是比较关键的功能字典序比较。
thenComparing(comparing(keyExtractor, cmp))
。
U
-排序键的类型
keyExtractor
-用于提取排序键的功能
keyComparator
-用来比较排序键的
Comparator
NullPointerException
-如果任一参数为null。
comparing(Function, Comparator)
,
thenComparing(Comparator)
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
-如果参数为空。
comparing(Function)
,
thenComparing(Comparator)
default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor)
int
排序关键字功能字典序比较。
thenComparing(comparingInt(keyExtractor))
。
keyExtractor
-用于提取整数排序键的功能
int
排序关键字
NullPointerException
-如果参数为空。
comparingInt(ToIntFunction)
,
thenComparing(Comparator)
default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor)
long
排序关键字功能字典序比较。
thenComparing(comparingLong(keyExtractor))
。
keyExtractor
-用于提取长排序键的功能
long
排序关键字
NullPointerException
-如果参数为空。
comparingLong(ToLongFunction)
,
thenComparing(Comparator)
default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
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
static <T extends Comparable<? super T>> Comparator<T> naturalOrder()
Comparable
对象自然秩序。
返回的比较器可序列化和投NullPointerException
比较时,null
。
T
-元是比较
Comparable
型
Comparable
对象征收的自然排序。
Comparable
static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator)
null
要小于非空。当双方都
null
,他们被认为是平等的。如果都是非空的,指定的
Comparator
是用来确定订单。如果指定的比较器
null
,然后返回的比较器认为所有非空值相等。
如果指定的比较器,比较器是序列化序列化返回。
T
-被比较元素的类型
comparator
-一种比较非空值
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)
Comparator
比较
Person
对象按姓氏忽略大小写的差异,
Comparator<Person> cmp = Comparator.comparing(
Person::getLastName,
String.CASE_INSENSITIVE_ORDER);
T
-被比较元素的类型
U
-排序键的类型
keyExtractor
-用于提取排序键的功能
keyComparator
-用来比较排序键的
Comparator
Comparator
NullPointerException
-如果任一参数为null
static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
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)
T
提取物一
long
排序键的功能,并返回一个
Comparator<T>
比较的排序关键字。
如果指定的函数也返回序列化序列化比较器。
T
-被比较元素的类型
keyExtractor
-用于提取长排序键的功能
NullPointerException
-如果参数为空
comparing(Function)
static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)
T
提取物一
double
排序键的功能,并返回一个
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.