zoukankan      html  css  js  c++  java
  • Scala使用隐式转换进行比较

     Boy.scala

    class Boy(val name: String, val faceValue: Int) extends Comparable[Boy]{
      override def compareTo(o: Boy): Int = {
        this.faceValue - o.faceValue
      }
    }

     Girl.scala

    class Girl(val name: String, val faceValue: Int, val size: Int) {
    
    }

      MissLeft.scala

    //class MissLeft[T <% Ordered[T]] {
    //
    //  def choose(first: T, second: T) : T = {
    //    if (first > second) first else second
    //  }
    //
    //}
    
    class MissLeft[T : Ordering] {
    
      def choose(first: T, second: T): T = {
        val ord = implicitly[Ordering[T]]
        if(ord.gt(first, second)) first else second
      }
    }
    
    object MissLeft {
      def main(args: Array[String]) {
        import MyPreDef.girlOrdering
        val ml = new MissLeft[Girl]
        val g1 = new Girl("hatanao", 98, 28)
        val g2 = new Girl("sora", 95, 33)
        val g = ml.choose(g1, g2)
        println(g.name)
      }
    }

     MissRight.scala

    class MissRight[T] {
    
      def choose(first: T, second: T)(implicit ord : T => Ordered[T]): T = {
        if(first > second) first else second
      }
    
      def select(first: T, second: T)(implicit ord : Ordering[T]): T ={
        if(ord.gt(first, second)) first else second
      }
    
      def random(first: T, second: T)(implicit ord : Ordering[T]): T ={
        import Ordered.orderingToOrdered
        if(first > second) first else second
      }
    
    }
    
    object MissRight {
      def main(args: Array[String]) {
        val mr = new MissRight[Girl]
        val g1 = new Girl("hatanao", 98, 28)
        val g2 = new Girl("sora", 95, 33)
    
        import MyPreDef.girlOrdering
        //val g = mr.choose(g1, g2)
        val g = mr.select(g1, g2)
        println(g.name)
      }
    }

      MyPreDef.scala

    object MyPreDef {
    
      implicit def girlToOrdered(girl: Girl) = new Ordered[Girl]{
        override def compare(that: Girl): Int = {
          if(girl.faceValue == that.faceValue) {
            girl.size - that.size
          } else {
            girl.faceValue - that.faceValue
          }
        }
      }
    
      implicit object girlOrdering extends Ordering[Girl] {
        override def compare(x: Girl, y: Girl): Int = {
          if(x.faceValue == y.faceValue) {
            x.size - y.size
          } else {
            x.faceValue - y.faceValue
          }
        }
      }
    }

     MrRight.scala

    class MrRight[T] {
    
      def choose[T <: Comparable[T]](first: T, second: T): T = {
        if(first.compareTo(second) > 0) first else second
      }
    
    }
    
    object MrRight {
      def main(args: Array[String]) {
        val mr = new MrRight[Boy]
        val b1 = new Boy("zhangsan", 99)
        val b2 = new Boy("lisi", 100)
        val b = mr.choose(b1, b2)
        println(b.name)
      }
    }
  • 相关阅读:
    CentOS初步学习记录(五)用户和用户组
    CentOS初步学习记录(四)curl文件传输和grep文本搜索
    微信公众号推文svg点击交互的方法
    layaair写动画的方法 用时间轴最方便
    spring boot 整合Elasticsearch
    java spring boot 拦截器 实现未登录用户不能登录
    java win 安装 activemq教程
    java spring boot Swagger2 构建api文档
    java spring boot @bean的用法
    java spring boot 写入日志
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/6736954.html
Copyright © 2011-2022 走看看