前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala实现两个对象的比较

Scala实现两个对象的比较

作者头像
静谧星空TEL
发布2021-04-27 10:59:48
1.7K0
发布2021-04-27 10:59:48
举报

方法一:

使用隐式对象 implicit object 继承 Ordering[T]类,重写compare方法实现

代码语言:javascript
复制
// 随机定义一个方法
class XiaoHei(val name:String, val age:Int) {
  // 重写toString方法
  override def toString:String = s"name:${name}, age:${age}"
}

object Scala4 {
  // 定义隐式对象
  implicit object Order extends Ordering[XiaoHei]{
    // 重写(自定义)compare方法
    override def compare(x:XiaoHei, y:XiaoHei): Int = x.age -y.age
  }
}

object OderingDemo {
  // 定义比较方法
  def choose(t1:XiaoHei, t2:XiaoHei): XiaoHei = {
    // 引入隐式对象
    import Scala4.Order
    if (Ordering[XiaoHei].compare(t1, t2) > 0) t1 else t2
  }
  // 主方法
  def main(args:Array[String]): Unit = {
    val s1 = new XiaoHei("小黑",10)
    val s2 = new XiaoHei("小白", age = 12)
    println(choose(s1,s2))
  }
}

运行结果

方法二:

定义Comparable的实现类,实现CompareTo方法;

再定义一个以Comparable为参数的泛型类,方法实现比较逻辑

代码语言:javascript
复制
// 定义泛型类,接受参数为Comparable的实现类
class ChooseClass[T <: Comparable[T]] {
  // choose方法实现Comparable实现类的具体比较
  def choose(t1:T, t2:T): T = {
    if (t1.compareTo(t2) >0) t1 else t2
  }
}

// 定义comparable的实现类,实现compareTo方法
class CompareClass(val name:String) extends Comparable[CompareClass] {
  override def toString:String = this.name
  override def compareTo(o: CompareClass): Int = this.name.compareTo(o.name)
}

// 测试类
object Test {
  def main(args:Array[String]): Unit = {
    val choose1 = new ChooseClass[Integer]
    println(choose1.choose(100,200))
    val choose2 = new ChooseClass[CompareClass]()
    println(choose2.choose(new CompareClass("小黑"),new CompareClass("小白")))
  }
}

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档