新聞中心
Comparator

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、咸陽(yáng)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為咸陽(yáng)等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
@FunctionalInterface
public interface Comparator
一個(gè)比較函數(shù),它對(duì)某些對(duì)象集合進(jìn)行總排序。比較器可以傳遞給排序方法(例如 Collections#sort(List,Comparator) 或 [Arrays#sort(Object],Comparator)),以允許精確控制排序順序。比較器還可用于控制某些數(shù)據(jù)結(jié)構(gòu)(例如 SortedSet 或 SortedMap)的順序,或者為沒(méi)有 Comparable 的對(duì)象集合提供排序。
當(dāng)且僅當(dāng) c.compare(e1, e2)==0 對(duì)于每個(gè) e1 具有與 e1.equals(e2) 相同的布爾值時(shí),比較器 c 對(duì)一組元素 S 施加的排序被稱為與 equals 一致和 S 中的 e2。
當(dāng)使用能夠施加與等于不一致的排序的比較器來(lái)對(duì)排序集(或排序映射)進(jìn)行排序時(shí),應(yīng)謹(jǐn)慎行事。假設(shè)帶有顯式比較器 c 的有序集合(或有序映射)與從集合 S 中提取的元素(或鍵)一起使用。如果 c 對(duì) S 施加的排序與 equals 不一致,則有序集合(或有序映射)將表現(xiàn)得“奇怪”。特別是有序集合(或有序映射)將違反集合(或映射)的一般合同,它是根據(jù)等式定義的。
例如,假設(shè)將兩個(gè)元素 a 和 b 相加,使得 (a.equals(b) && c.compare(a, b) != 0) 到具有比較器 c 的空 TreeSet。第二個(gè) add 操作將返回 true(并且樹集的大小將增加),因?yàn)閺臉浼慕嵌葋?lái)看 a 和 b 不等價(jià),即使這與 Set#add 方法的規(guī)范相反。
注意:比較器通常也實(shí)現(xiàn) java.io.Serializable 是一個(gè)好主意,因?yàn)樗鼈兛梢杂米骺尚蛄谢瘮?shù)據(jù)結(jié)構(gòu)(如 TreeSet、TreeMap)中的排序方法。為了使數(shù)據(jù)結(jié)構(gòu)成功序列化,比較器(如果提供)必須實(shí)現(xiàn) Serializable。
對(duì)于數(shù)學(xué)傾向,定義給定比較器 c 對(duì)給定對(duì)象集 S 施加的強(qiáng)制排序的關(guān)系是:
{(x, y) such that c.compare(x, y) <= 0}.
這個(gè)總訂單的商是:
{(x, y) such that c.compare(x, y) == 0}.
立即從比較契約得出,商是 S 上的等價(jià)關(guān)系,并且強(qiáng)加的排序是 S 上的全排序。當(dāng)我們說(shuō) c 對(duì) S 強(qiáng)加的排序與 equals 一致時(shí),我們的意思是 排序的商是對(duì)象的 Object#equals(Object) 方法定義的等價(jià)關(guān)系:
{(x, y) such that x.equals(y)}.
與 Comparable 不同的是,比較器可以選擇允許比較空參數(shù),同時(shí)保持對(duì)等價(jià)關(guān)系的要求。
此接口是 Java 集合框架的成員。
方法總結(jié)
| 修飾符和類型 | 方法 | 描述 |
|---|---|---|
| int | compare(T o1, T o2) | 比較它的兩個(gè)參數(shù)的順序。 |
| static |
comparing(Function super T,? extends U> keyExtractor) | 接受從類型 T 中提取 Comparable 排序鍵的函數(shù),并返回按該排序鍵進(jìn)行比較的 Comparator |
| static |
comparing(Function super T,? extends U> keyExtractor, Comparator super U> keyComparator) | 接受一個(gè)從類型 T 中提取排序鍵的函數(shù),并返回一個(gè) Comparator |
| static |
comparingDouble(ToDoubleFunction super T> keyExtractor) | 接受一個(gè)從類型 T 中提取雙重排序鍵的函數(shù),并返回一個(gè)按該排序鍵進(jìn)行比較的 Comparator |
| static |
comparingInt(ToIntFunction super T> keyExtractor) | 接受從類型 T 中提取 int 排序鍵的函數(shù),并返回按該排序鍵進(jìn)行比較的 Comparator |
| static |
comparingLong(ToLongFunction super T> keyExtractor) | 接受從類型 T 中提取長(zhǎng)排序鍵的函數(shù),并返回按該排序鍵進(jìn)行比較的 Comparator |
| boolean | equals(Object obj) | 指示某個(gè)其他對(duì)象是否“等于”此比較器。 |
| static |
naturalOrder() | 返回按自然順序比較 Comparable 對(duì)象的比較器。 |
| static |
nullsFirst(Comparator super T> comparator) | 返回一個(gè) null 友好的比較器,它認(rèn)為 null 小于非 null。 |
| static |
nullsLast(Comparator super T> comparator) | 返回一個(gè) null 友好的比較器,它認(rèn)為 null 大于非 null。 |
| default ComparatorT | reversed() | 返回一個(gè)強(qiáng)制此比較器反向排序的比較器。 |
| static |
reverseOrder() | 返回一個(gè)強(qiáng)制與自然順序相反的比較器。 |
| default ComparatorT | thenComparing(Comparator super T> other) | 返回具有另一個(gè)比較器的字典順序比較器。 |
| default >ComparatorT | thenComparing(Function super T,? extends U> keyExtractor) | 返回具有提取 Comparable 排序鍵的函數(shù)的字典順序比較器。 |
| default ComparatorT | thenComparing(Function super T,? extends U> keyExtractor, Comparator super U> keyComparator) | 返回一個(gè)字典順序比較器,其函數(shù)提取要與給定比較器比較的鍵。 |
| default ComparatorT | thenComparingDouble(ToDoubleFunction super T> keyExtractor) | 返回具有提取雙排序鍵的函數(shù)的字典順序比較器。 |
| default ComparatorT | thenComparingInt(ToIntFunction super T> keyExtractor) | 返回具有提取 int 排序鍵的函數(shù)的字典順序比較器。 |
| default ComparatorT | thenComparingLong(ToLongFunction super T> keyExtractor) | 返回具有提取長(zhǎng)排序鍵的函數(shù)的字典順序比較器。 |
方法詳情
compare
int compare(T o1, T o2)
比較它的兩個(gè)參數(shù)的順序。返回負(fù)整數(shù)、零或正整數(shù),因?yàn)榈谝粋€(gè)參數(shù)小于、等于或大于第二個(gè)。
在前面的描述中,符號(hào)sgn(expression)表示數(shù)學(xué)符號(hào)函數(shù),它被定義為根據(jù)表達(dá)式的值是負(fù)數(shù)、零還是正數(shù)返回-1、0或1之一。
實(shí)現(xiàn)者必須確保所有 x 和 y 的 sgn(compare(x, y)) == -sgn(compare(y, x))。 (這意味著當(dāng)且僅當(dāng) compare(y, x) 拋出異常時(shí) compare(x, y) 必須拋出異常。)
實(shí)現(xiàn)者還必須確保關(guān)系是可傳遞的: ((compare(x, y)>0) && (compare(y, z)>0)) 意味著 compare(x, z)>0。
最后,實(shí)現(xiàn)者必須確保 compare(x, y)==0 意味著所有 z 的 sgn(compare(x, z))==sgn(compare(y, z))。
通常是這樣,但并不嚴(yán)格要求 (compare(x, y)==0) == (x.equals(y))。一般來(lái)說(shuō),任何違反此條件的比較器都應(yīng)清楚地表明這一事實(shí)。推薦的語(yǔ)言是“注意:這個(gè)比較器強(qiáng)加了與等于不一致的排序?!?/p>
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| o1 | 第一個(gè)要比較的對(duì)象。 |
| o2 | 第二個(gè)要比較的對(duì)象。 |
返回:
作為第一個(gè)參數(shù)的負(fù)整數(shù)、零或正整數(shù)小于、等于或大于第二個(gè)參數(shù)。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空且此比較器不允許空參數(shù) |
| ClassCastException | 如果參數(shù)的類型阻止它們被此比較器進(jìn)行比較。 |
equals
boolean equals(Object obj)
指示某個(gè)其他對(duì)象是否“等于”此比較器。 此方法必須遵守 Object#equals(Object) 的一般約定。 此外,只有當(dāng)指定的對(duì)象也是一個(gè)比較器并且它強(qiáng)制執(zhí)行與此比較器相同的排序時(shí),此方法才能返回 true。 因此,對(duì)于每個(gè)對(duì)象引用 o1 和 o2,comp1.equals(comp2) 意味著 sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))。
請(qǐng)注意,不要覆蓋 Object.equals(Object) 始終是安全的。 但是,在某些情況下,重寫此方法可能會(huì)通過(guò)允許程序確定兩個(gè)不同的比較器施加相同的順序來(lái)提高性能。
覆蓋:
類 Object 中的等于
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| obj | 要與之比較的參考對(duì)象。 |
返回:
僅當(dāng)指定對(duì)象也是一個(gè)比較器并且它施加與此比較器相同的順序時(shí)才為true。
reversed
default ComparatorT reversed()
返回一個(gè)強(qiáng)制此比較器反向排序的比較器。
返回:
一個(gè)比較器,它強(qiáng)制此比較器的反向排序。
thenComparing
default ComparatorT thenComparing(Comparator super T> other)
返回具有另一個(gè)比較器的字典順序比較器。 如果此 Comparator 認(rèn)為兩個(gè)元素相等,即 compare(a, b) == 0,則使用 other 來(lái)確定順序。
如果指定的比較器也是可序列化的,則返回的比較器是可序列化的。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| other | 當(dāng)此比較器比較兩個(gè)相等的對(duì)象時(shí)要使用的另一個(gè)比較器。 |
返回:
由這個(gè)比較器和另一個(gè)比較器組成的字典順序比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空。 |
thenComparing
default ComparatorT thenComparing(Function super T,? extends U> keyExtractor, Comparator super U> keyComparator)
返回一個(gè)字典順序比較器,其函數(shù)提取要與給定比較器比較的鍵。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| U | 排序鍵的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取排序鍵的函數(shù) |
| keyComparator | 用于比較排序鍵的 Comparator |
返回:
由該比較器組成的字典順序比較器,然后對(duì) keyExtractor 函數(shù)提取的鍵進(jìn)行比較
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果任一參數(shù)為空。 |
thenComparing
default > ComparatorT thenComparing(Function super T,? extends U> keyExtractor)
返回具有提取 Comparable 排序鍵的函數(shù)的字典順序比較器。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| U | Comparable 排序鍵的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取 Comparable 排序鍵的函數(shù) |
返回:
由 this 和 Comparable 排序鍵組成的字典順序比較器。
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空。 |
thenComparingInt
default ComparatorT thenComparingInt(ToIntFunction super T> keyExtractor)
返回具有提取 int 排序鍵的函數(shù)的字典順序比較器。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取整數(shù)排序鍵的函數(shù) |
返回:
由 this 和 int 排序鍵組成的字典順序比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空。 |
thenComparingLong
default ComparatorT thenComparingLong(ToLongFunction super T> keyExtractor)
返回具有提取長(zhǎng)排序鍵的函數(shù)的字典順序比較器。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取長(zhǎng)排序鍵的函數(shù) |
返回:
由 this 和長(zhǎng)排序鍵組成的字典順序比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空。 |
thenComparingDouble
default ComparatorT thenComparingDouble(ToDoubleFunction super T> keyExtractor)
返回具有提取雙排序鍵的函數(shù)的字典順序比較器。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取雙重排序鍵的函數(shù) |
返回:
由 this 和雙排序鍵組成的字典順序比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空。 |
reverseOrder
static
返回一個(gè)強(qiáng)制與自然順序相反的比較器。
返回的比較器是可序列化的,并在比較 null 時(shí)拋出 NullPointerException。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素的 Comparable 類型 |
返回:
一個(gè)比較器,它對(duì) Comparable 對(duì)象施加相反的自然順序。
naturalOrder
static
返回按自然順序比較 Comparable 對(duì)象的比較器。
返回的比較器是可序列化的,并在比較 null 時(shí)拋出 NullPointerException。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素的 Comparable 類型 |
返回:
對(duì) Comparable 對(duì)象施加自然排序的比較器。
nullsFirst
static
返回一個(gè) null 友好的比較器,它認(rèn)為 null 小于非 null。 當(dāng)兩者都為空時(shí),它們被認(rèn)為是相等的。 如果兩者都不為空,則使用指定的 Comparator 來(lái)確定順序。 如果指定的比較器為空,則返回的比較器將所有非空值視為相等。
如果指定的比較器是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| comparator | 用于比較非空值的比較器 |
返回:
一個(gè)比較器,它認(rèn)為 null 小于非 null,并將非 null 對(duì)象與提供的 Comparator 進(jìn)行比較。
nullsLast
static
返回一個(gè) null 友好的比較器,它認(rèn)為 null 大于非 null。 當(dāng)兩者都為空時(shí),它們被認(rèn)為是相等的。 如果兩者都不為空,則使用指定的 Comparator 來(lái)確定順序。 如果指定的比較器為空,則返回的比較器將所有非空值視為相等。
如果指定的比較器是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| comparator | 用于比較非空值的比較器 |
返回:
一個(gè)比較器,它認(rèn)為 null 大于非 null,并將非 null 對(duì)象與提供的 Comparator 進(jìn)行比較。
comparing
static
接受一個(gè)從類型 T 中提取排序鍵的函數(shù),并返回一個(gè) Comparator
如果指定的函數(shù)和比較器都是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素類型 |
| U | 排序鍵的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取排序鍵的函數(shù) |
| keyComparator | 用于比較排序鍵的 Comparator |
返回:
一個(gè)比較器,它使用指定的 Comparator 按提取的鍵進(jìn)行比較
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果任一參數(shù)為空 |
comparing
static
接受從類型 T 中提取 Comparable 排序鍵的函數(shù),并返回按該排序鍵進(jìn)行比較的 Comparator
如果指定的函數(shù)也是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素類型 |
| U | Comparable 排序鍵的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取 Comparable 排序鍵的函數(shù) |
返回:
通過(guò)提取的鍵進(jìn)行比較的比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空 |
comparingInt
static
接受從類型 T 中提取 int 排序鍵的函數(shù),并返回按該排序鍵進(jìn)行比較的 Comparator
如果指定的函數(shù)也是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取整數(shù)排序鍵的函數(shù) |
返回:
通過(guò)提取的鍵進(jìn)行比較的比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空 |
comparingLong
static
接受從類型 T 中提取長(zhǎng)排序鍵的函數(shù),并返回按該排序鍵進(jìn)行比較的 Comparator
如果指定的函數(shù)也是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取長(zhǎng)排序鍵的函數(shù) |
返回:
通過(guò)提取的鍵進(jìn)行比較的比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空 |
comparingDouble
static
接受一個(gè)從類型 T 中提取雙重排序鍵的函數(shù),并返回一個(gè)按該排序鍵進(jìn)行比較的 Comparator
如果指定的函數(shù)也是可序列化的,則返回的比較器是可序列化的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| T | 要比較的元素類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| keyExtractor | 用于提取雙重排序鍵的函數(shù) |
返回:
通過(guò)提取的鍵進(jìn)行比較的比較器
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果參數(shù)為空 |
本文名稱:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OSComparator
鏈接分享:http://m.5511xx.com/article/cdjshcp.html


咨詢
建站咨詢
