scala入门06 集合的排序

来源:互联网 发布:网络信号避雷器 编辑:程序博客网 时间:2024/06/05 02:55

在java里面集合排序有comparable和compator,在scala里面也有类似的接口,下面写个List简单排序的demo:

结构如下(就一个demo 和 隐式转换的mypredef):

这里写图片描述

demo01如下(分别有三个方法的demo sortWith,sorted和sortby):

package cn.touna/**  * User: lijie  */class Demo01 {}object Demo01 {  def main(args: Array[String]): Unit = {    //sortWith------------------    val list01 = List[Person](new Person("lijie3", 25), new Person("lijie0", 99), new Person("lijie1", 24), new Person("lijie1", 1))    val order01 = list01.sortWith((p1: Person, p2: Person) => {      p1.name == p2.name match {        case false => p1.name.compareTo(p2.name) < 0        case _ => p1.age > p2.age      }    })    for (x <- order01) {      println("list01:" + x)    }    //sorted--------------------    val list02 = List[Person](new Person("lijie3", 25), new Person("lijie0", 99), new Person("lijie1", 24), new Person("lijie1", 1))    //引入隐式转换    import MyPredef.Person2Comparable    val order02 = list02.sorted    for (x <- order02) {      println("list02:" + x)    }    //sortby--------------------    val list03 = List[Person](new Person("lijie3", 25), new Person("lijie0", 99), new Person("lijie1", 24), new Person("lijie1", 1))    val order03 = list03.sortBy(p => p)    for (x <- order03) {      println("list03:" + x)    }  }}class Person(var name: String, var age: Int) {  override def toString = s"Person($name, $age)"}

predef如下:

package cn.touna/**  * User: lijie  */object MyPredef {  implicit object Person2Comparable extends Ordering[Person] {    override def compare(x: Person, y: Person): Int = {      x.name == y.name match {        case false => x.name.compare(y.name)        case _ => y.age - x.age      }    }  }}

执行结果如下:

这里写图片描述

原创粉丝点击