成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

「lambda表達式」Comparator接口

開發 前端
靜態 comparing 方法取一個“ 鍵提取器” 函數, 它將類型 T 映射為一個可比較的類型 ( 如 String ) 。對要比較的對象應用這個函數, 然后對返回的鍵完成比較。例如,假設有一個 Person 對象數組,可以如下按名字對這些對象排序: Arrays.sort(people, Comparator.comparing(Person::getName));

Comparator 接口包含很多方便的靜態方法來創建比較器。 這些方法可以用于 lambda 表達式或方法引用。

靜態 comparing 方法取一個“ 鍵提取器” 函數, 它將類型 T 映射為一個可比較的類型 ( 如 String ) 。對要比較的對象應用這個函數, 然后對返回的鍵完成比較。例如,假設有一個 Person 對象數組,可以如下按名字對這些對象排序: Arrays.sort(people, Comparator.comparing(Person::getName));

與手動實現一個 Compamtor 相比, 這當然要容易得多。另外,代碼也更為清晰, 因為顯然我們都希望按人名來進行比較。

可以把比較器與 thenComparing 方法串起來。 例如:

Arrays.sort(people,
Comparator.comparing(Person::getlastName)
.thenComparing(Person::getFirstName));

如果兩個人的姓相同, 就會使用第二個比較器。 這些方法有很多變體形式。可以為 comparing 和 thenComparing 方法提取的鍵指定一個 比較器。例如,可以如下根據人名長度完成排序:

Arrays.sort(people, Comparator.comparing(Person::getName,
(s, t) -> Integer.compare(s.length(), t.length()));

另外, comparing 和 thenComparing 方法都有變體形式,可以避免 int、 long 或 double 值 的裝箱。要完成前一個操作, 還有一種更容易的做法:

Arrays.sort(people, Comparator.comparingInt(p -> p.getName().length()));

如果鍵函數可以返回 null , 可能就要用到 nullsFirst 和 nullsLast 適配器。這些靜態方法會修改現有的比較器,從而在遇到 null 值時不會拋出異常, 而是將這個值標記為小于或 大于正常值。例如, 假設一個人沒有中名時 getMiddleName 會返回一個 null, 就可以使用 Comparator.comparing(Person::getMiddleName(), Comparator.nullsFirst(… ) 。

nullsFirst 方法需要一個比較器,在這里就是比較兩個字符串的比較器。naturalOrder 方法可以為任何實現了 Comparable 的類建立一個比較器。在這里,Comparator.naturalOrder() 正是我們需要的。下面是一個完整的調用, 可以按可能為 null 的中名進行排序。這里使用了一個靜態導入 java.util.Comparator.* 以便理解這個表達式。注意 naturalOrder 的類型可以推導得出

Arrays.sort(people, comparing(Person::getMiddleName , nullsFirst(naturalOrder())));

靜態 reverseOrder 方法會提供自然順序的逆序。要讓比較器逆序比較, 可以使用 reversed 實例方法。例如 naturalOrder().reversed() 等同于 reverseOrder()。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2009-09-11 09:48:27

Linq Lambda

2009-08-27 09:44:59

C# Lambda表達

2009-09-15 17:30:00

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2012-06-26 10:03:58

JavaJava 8lambda

2024-03-25 13:46:12

C#Lambda編程

2024-12-02 10:56:29

2024-03-08 09:45:21

Lambda表達式Stream

2013-04-07 15:44:26

Java8Lambda

2009-08-10 09:41:07

.NET Lambda

2009-09-09 17:14:17

Linq lambda

2013-04-10 10:58:19

LambdaC#

2009-08-27 09:57:50

C# Lambda表達

2009-08-31 17:11:37

Lambda表達式

2009-09-17 09:09:50

Lambda表達式Linq查詢

2009-08-26 16:17:23

C# Lambda表達

2022-12-01 07:38:49

lambda表達式函數式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91麻豆精品国产91久久久久久 | 精品三级在线观看 | 亚洲精美视频 | 欧美福利在线 | 亚洲天堂av网 | 久久草在线视频 | 97精品超碰一区二区三区 | 一本一道久久a久久精品综合 | 日韩中文字幕 | 天天射中文| 欧美色专区| 国产成人综合在线 | 五月天激情电影 | av福利网站 | 特黄色一级毛片 | 亚洲日韩中文字幕一区 | 综合久久99 | 一区二区av | 玖玖国产精品视频 | 国产亚洲精品久久情网 | 国产免费播放视频 | 久久免费视频观看 | 日韩国产一区二区三区 | 欧洲亚洲精品久久久久 | 欧美在线视频一区二区 | 超碰精品在线 | 日韩成人免费视频 | 亚洲视频一区二区三区 | 亚洲成人一区二区三区 | 91免费视频 | 中文字幕成人 | 欧美午夜视频 | 国产一区二区三区四区 | 日韩免费在线视频 | 五月婷六月丁香 | 精品免费国产 | 久久这里只有精品首页 | 99爱免费 | 亚洲国产在 | 久久新视频| 日韩中文字幕在线视频观看 |