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)
      }
    }
  • 相关阅读:
    JSP标签介绍
    JSP四大作用域属性范围
    JSP九大内置对象及四个作用域
    maven:Fatal error compiling: 无效的目标发行版: 1.8.0_45 -> [Help 1]
    浅谈Session与Cookie的区别与联系
    Servlet入门实践
    安卓常用布局基本属性
    安卓常用布局
    Android开发中Handler的经典总结
    三种方法写监听事件
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/6736954.html
Copyright © 2011-2022 走看看