目錄
排序
預設排序 sorted
指定字段排序 sortBy
自定義排序 | sortWith
排序
在scala集合中,可以使用以下幾種方式來進行排序
- sorted預設排序
- sortBy指定字段排序
- sortWith自定義排序
預設排序 sorted
示例
定義一個清單,包含以下元素: 3, 1, 2, 9, 7
對清單進行升序排序
參考代碼
scala> List(3,1,2,9,7).sorted
res16: List[Int] = List(1, 2, 3, 7, 9)
指定字段排序 sortBy
根據傳入的函數轉換後,再進行排序
方法簽名
def sortBy[B](f: (A) ⇒ B): List[A]
方法解析
sortBy方法 | API | 說明 |
泛型 | [B] | 按照什麼類型來進行排序 |
參數 | f: (A) ⇒ B | 傳入函數對象<br />接收一個集合類型的元素參數<br />傳回B類型的元素進行排序 |
傳回值 | List[A] | 傳回排序後的清單 |
示例
有一個清單,分别包含幾下文本行:"01 hadoop", "02 flume", "03 hive", "04 spark"
請按照單詞字母進行排序
參考代碼
scala> val a = List("01 hadoop", "02 flume", "03 hive", "04 spark")
a: List[String] = List(01 hadoop, 02 flume, 03 hive, 04 spark)
// 擷取單詞字段
scala> a.sortBy(_.split(" ")(1))
res8: List[String] = List(02 flume, 01 hadoop, 03 hive, 04 spark)
自定義排序 | sortWith
自定義排序,根據一個函數來進行自定義排序
類似在Java中實作Comparable接口
方法簽名
def sortWith(lt: (A, A) ⇒ Boolean): List[A]
方法解析
sortWith方法 | API | 說明 |
參數 | lt: (A, A) ⇒ Boolean | 傳入一個比較大小的函數對象<br />接收兩個集合類型的元素參數<br />傳回兩個元素大小,小于傳回true,大于傳回false, 也就是升序排序的意思, 如果要實作降序, 可以自行控制小于傳回false 大于傳回true<br />不用去想這兩個參數是如何傳遞的, scala會自動幫我們将帶處理清單的元素兩兩傳遞過來讓我們進行排序 |
傳回值 | List[A] | 傳回排序後的清單 |
示例
有一個清單,包含以下元素:2,3,1,6,4,5
使用sortWith對清單進行降序排序
參考代碼
scala> val a = List(2,3,1,6,4,5)
a: List[Int] = List(2, 3, 1, 6, 4, 5)
scala> a.sortWith((x,y) => if(x<y)true else false)
res15: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> res15.reverse
res18: List[Int] = List(6, 5, 4, 3, 2, 1)
使用下劃線簡寫上述案例
參考代碼
scala> val a = List(2,3,1,6,4,5)
a: List[Int] = List(2, 3, 1, 6, 4, 5)
// 函數參數隻在函數中出現一次,可以使用下劃線代替
scala> a.sortWith(_ < _).reverse
res19: List[Int] = List(6, 5, 4, 3, 2, 1)
兩個參數都是隻出現一次, 并沒有嵌套, 那麼可以用下劃線代替