天天看點

Java中List排序的3種方法

在某些特殊的場景下,我們需要在 Java 程式中對 List 集合進行排序操作。比如從第三方接口中擷取所有使用者的清單,但清單預設是以使用者編号從小到大進行排序的,而我們的系統需要按照使用者的年齡從大到小進行排序,這個時候,我們就需要對 List 集合進行自定義排序操作了。

List 排序的常見方法有以下 3 種:

使用 Comparable 進行排序;

使用 Comparator 進行排序;

如果是 JDK 8 以上的環境,也可以使用 Stream 流進行排序。

下面我們分别來看各種排序方法的具體實作。

按照本文設計的場景,我們需要建立一個包含了使用者清單的 List 集合,并按使用者的年齡從大到小進行排序,具體實作代碼如下:

以上代碼的執行結果,如下圖所示:

本方法的核心代碼如下:

Comparable 是類内部的比較方法,而 Comparator 是排序類外部的比較器。使用 Comparator 比較器,無需修改原 Person 類,隻需要擴充一個 Person 類的比較器就行了,Comparator 的實作方法有以下兩種:

建立 Comparator 比較器;

使用 Comparator 匿名類比較器。

其中,第二種實作方法要更簡潔一些,我們通過下面的具體代碼,來觀察一下二者的差別。

本方法的核心實作代碼如下:

比較器 Comparator 可以使用更簡潔的匿名類的方式,來實作排序功能,具體實作代碼如下:

在 JDK 8 之後可以使用更加簡單的方法 Stream 流來實作排序功能,它的實作隻需要一行代碼,具體實作如下:

其中 reversed() 表示倒序的意思,如果不使用此方法則是正序。

使用 Stream 進行排序時,如果排序的字段出現 null 值就會導緻異常發生,具體示例如下:

想要解決上述問題,需要給 Comparator.comparing 傳遞第二個參數:Comparator.nullsXXX,如下代碼所示:

Comparator.nullsFirst 表示将排序字段中的 null 值放到集合最前面,如果想要将 null 值放到集合最後面可以使用 Comparator.nullsLast。

本文介紹了 3 種 List 排序的方法,前兩種方法常用于 JDK 8 之前的版本,其中比較器 Comparator 有兩種實作的寫法,而在 JDK 8 之後的版本,就可以使用 Comparator.comparing 實作排序了,如果排序字段中可能出現 null 值,要使用 Comparator.nullsXXX 進行排序處理(否則會報錯)。

卒然臨之而不驚,無故加之而不怒。享受平凡生活中的喜悅,終身成長者。 部落客:80 後程式員。愛好:讀書、寫作和慢跑。 公衆号:Java面試真題解析

關注下面二維碼,訂閱更多精彩内容。

Java中List排序的3種方法
Java中List排序的3種方法
Java中List排序的3種方法

關注公衆号(加好友):

Java中List排序的3種方法

作者:

王磊的部落格

出處:

http://vipstone.cnblogs.com/