Scala使用隐式转换进行比较
2017-04-20 09:15
288 查看
Boy.scala
Girl.scala
MissLeft.scala
MissRight.scala
MyPreDef.scala
MrRight.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) } }
相关文章推荐
- 第16节:scala使用implicit进行的隐式转换
- Scala 2.10.0 新特性之使用隐式类进行类型隐式转换
- Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析之Scala学习笔记-51
- 类型之间进行隐式和显示转换&创建使用枚举&创建使用结构类型&创建使用数组&;如何处理字符串值
- Scala深入浅出进阶经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
- Scala泛型、隐式转换和隐式参数、视图介绍、Scala中的上界、下界、结合柯里化进行隐式转换
- 第63讲Scala中隐式参数与隐式转换的联合使用解析
- 记录: 一次解决整型溢出攻击(使用scala,隐式转换)
- Scala隐式转换几种使用场景
- 61.Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
- Scala 深入浅出实战经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
- scala 隐式转换 使File可以使用read方法
- 使用C#对Unix的timestamp进行转换
- 使用iconv库进行字符集转换
- 使用XStream进行POJO和xml之间的转换
- 水晶报表使用经验谈1--建立水晶报表第一步及编译最易出现错误的解决方法及报表转换成pdf文档进行打印方法
- 如何使用PHP和PEAR进行不同时区的转换
- 使用 Java 进行图像处理 - 将彩色图像转换为灰度图
- java中字符串的比较,必须使用string1.equals(string2)来进行判断
- 使用 ATL 提供的转换宏进行类型转换 LPSTR LPCSTR LPWSTR LPCWSTR