天天看點

Scala實作兩個對象的比較

方法一:

使用隐式對象 implicit object 繼承 Ordering[T]類,重寫compare方法實作

// 随機定義一個方法
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))
  }
}           

運作結果

Scala實作兩個對象的比較

方法二:

定義Comparable的實作類,實作CompareTo方法;

// 定義泛型類,接受參數為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("小白")))
  }
}