scala-上界

上界符号  <: 

对应的下界符号 >:


举例说明:

定义MyPerson类,对MyPerson类进行排序

class MyPerson(val firstName : String, val lastName : String)
  extends Ordered[MyPerson] {

  //混入特质Ordered,并实现compare
  def compare(that : MyPerson) = {
    val lastNameComp = lastName.compareToIgnoreCase(that.lastName )

    //先比较lastName,再比较firstName
    if (lastNameComp != 0)
      lastNameComp
    else
      firstName.compareToIgnoreCase(that.firstName )
  }
  
  override def toString = firstName + " " + lastName
}


//merge Sort 

def orderedMergeSort[T <: Ordered[T]](xs : List[T]) : List[T] = {

       //递归merge排序
      def merge(xs : List[T], ys : List[T]) : List[T] = 
        (xs, ys) match {
        case (Nil, _) => ys
        case (_, Nil) => xs
        case (x :: xsl, y :: ysl) =>
          if (x < y) x :: merge(xsl, ys)
          else y :: merge(xs, ysl)
      }
      val n = xs.length / 2
      if (n == 0) xs
      else {
        val (ys, zs) = xs splitAt n
        merge(orderedMergeSort(ys), orderedMergeSort(zs))
      }
    }

T <: Ordered[T]表示T需要有一个Ordered[T]的超类,例如String有一个Ordered[String]的超类,MyPerson有一个Ordered[MyPerson]的超类(因为MyPerson扩展了Ordered)。

但是请注意,Int没有Ordered[Int]的超类。

val people = List(new Person("larry", "wall"), new Person("tony", "stark"), new Person("alan", "kay"))

val sortedPeople = orderedMergeSort(people)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值