def sorted[B >: A](implicit ord: Ordering[B]): Repr
scala> val a = List(10, 5, 8, 1, 7).sorted
a: List[Int] = List(1, 5, 7, 8, 10)scala> val b = List("banana", "pear", "apple", "orange").sorted
b: List[String] = List(apple, banana, orange, pear)
自定義類型的排序
如果序列持有的類型沒有隱式類型,則無法用 對它進行排序
其中empList.sorted.foreach(println)
等價于
empList.sorted(Ordering[Emp]).foreach(println)
利用隱式參數完成排序
object _SortDemo4 extends App {val firstEmp: Emp = Emp(1, "michael", 1000.00)val secondEmp: Emp = Emp(2, "james", 12000.00)val thirdEmp = Emp(3, "shaun", 9000.00)val empList = List(firstEmp, secondEmp, thirdEmp)//傳參的時候不需要傳入隱式參數empList.sorted.foreach(println)
}case class Emp(id: Int, name: String, salary: Double) {
}object Emp {
//定義一個隱式變量implicit val suibian: Ordering[Emp] = new Ordering[Emp] {override def compare(x: Emp, y: Emp): Int = {val rs: Int = (x.salary - y.salary).toIntrs}}
}
隱式參數可以不用傳遞,系統會自動尋找
object _02Simple {def main(args: Array[String]): Unit = {val firstEmp: Emp = Emp(1, "michael", 12000.00)val secondEmp: Emp = Emp(2, "james", 12000.00)val thirdEmp = Emp(3, "shaun", 12000.00)val empList=List(firstEmp,secondEmp,thirdEmp)empList.sorted.foreach(println)}
}case class Emp(id: Int, name: String, salary: Double) extends Ordered[Emp] {override def compare(that: Emp): Int = this.name.compareTo(that.name)
}
要傳入一個比較函數,且該函數的返回值為布爾類型
def sortWith(lt: (A, A) => Boolean): Repr
scala> val list=List("a","d","F","B","e")
list: List[String] = List(a, d, F, B, e)scala> list.sortWith((x,y)=>x.toLowerCase<y.toLowerCase())
res0: List[String] = List(a, B, d, e, F)
scala> List("Steve", "Tom", "John", "Bob").sortWith(_.compareTo(_) < 0)
res1: List[String] = List(Bob, John, Steve, Tom)
自定義類的排序
比較簡單,不用定義隱式什么的
object _02Simple {def main(args: Array[String]): Unit = {val firstEmp: Emp = Emp(1, "michael", 12000.00)val secondEmp: Emp = Emp(2, "james", 12000.00)val thirdEmp = Emp(3, "shaun", 12000.00)val empList = List(firstEmp, secondEmp, thirdEmp)empList.sortWith((p1, p2) => {p1.name < p2.name}).foreach(println)}
}case class Emp(id: Int, name: String, salary: Double) {}
Scala獲取列表中的前5個元素?依據隱式的排序方法進行排序
def sortBy[B](f: A => B)(implicit ord: Ordering[B]): Repr
一維排序例子
scala> val words = "The quick brown fox jumped over the lazy dog".split(' ')
words: Array[String] = Array(The, quick, brown, fox, jumped, over, the, lazy, dog)
//依據字符串長度進行排序
scala> words.sortBy(x=>x.length)
res0: Array[String] = Array(The, fox, the, dog, over, lazy, quick, brown, jumped)
//先依據字符串長度,再依據首字母排序
scala> words.sortBy(x=>x.length,x.head)
<console>:26: error: too many arguments for method sortBy: (f: String => B)(implicit ord: scala.math.Ordering[B])Array[String]words.sortBy(x=>x.length,x.head)^scala> words.sortBy(x=>(x.length,x.head))
res2: Array[String] = Array(The, dog, fox, the, lazy, over, brown, quick, jumped)
//依據字典排序
scala> words.sortBy(x=>x)
res3: Array[String] = Array(The, brown, dog, fox, jumped, lazy, over, quick, the)
二維排序例子
scala> val a = List(("a",2),("b",44),("c",20),("a",20),("a",1))
a: List[(String, Int)] = List((a,2), (b,44), (c,20), (a,20), (a,1))
//依據數字進行排序
scala> a.sortBy(x=>x._2)
res8: List[(String, Int)] = List((a,1), (a,2), (c,20), (a,20), (b,44))
//先依據字母排序,字母相同的依據數字排序
scala> a.sortBy(x=>(x._1,x._2))
res9: List[(String, Int)] = List((a,1), (a,2), (a,20), (b,44), (c,20))scala> a.sortBy(x=>x._1)
res10: List[(String, Int)] = List((a,2), (a,20), (a,1), (b,44), (c,20))
//先依據數字排序,數字相同的依據字母排序
scala> a.sortBy(x=>(x._2,x._1))
res11: List[(String, Int)] = List((a,1), (a,2), (a,20), (c,20), (b,44))
sortBy源碼底層調用了sorted
def sortBy[B](f: A => B)(implicit ord: Ordering[B]): Repr = sorted(ord on f)
自定義類的排序
object _02Simple {def main(args: Array[String]): Unit = {val firstEmp: Emp = Emp(1, "michael", 10000.00)val secondEmp: Emp = Emp(2, "james", 18000.00)val thirdEmp = Emp(3, "shaun", 12000.00)val empList = List(firstEmp, secondEmp, thirdEmp)empList.sortBy(p => p.salary)(Ordering[Double]).foreach(println)}
}case class Emp(id: Int, name: String, salary: Double) {}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态