我在查找簡單優雅的方式將Java Comparator
轉換爲scala Ordering
。將Java比較器轉換爲Scala Ordering
使用案例:
我有我想用Java代碼中定義一個比較排序Scala的集合:
val comparator = getComparator()
val collection = Seq("a","b")
collection.sorted(???)
我在查找簡單優雅的方式將Java Comparator
轉換爲scala Ordering
。將Java比較器轉換爲Scala Ordering
使用案例:
我有我想用Java代碼中定義一個比較排序Scala的集合:
val comparator = getComparator()
val collection = Seq("a","b")
collection.sorted(???)
有讀取Ÿ在標準庫的隱式轉換:scala.math.Ordering.comparatorToOrdering
你只需要導入使用它:
import scala.math.Ordering.comparatorToOrdering
val comparator = getComparator()
val collection = Seq("a","b")
collection.sorted(comparator)
如果我沒有記錯的話,在Ordering伴侶包含一個隱含的從比較[A]到訂購[A]的轉換:
您可以導入scala.math.Ordering.Implicits以獲取對其他隱含它的順序。
例子:
import java.util.Date
val dateOrdering = implicitly[Ordering[Date]]
import dateOrdering._
val now = new Date
val later = new Date(now.getTime + 1000L)
now < later ... should be true
到目前爲止,我已經找到了最好的方法是定義自己的隱含了java.util.Comparator之間和訂貨
implicit def comparatorToOrdering[T](comparator: Comparator[T]) =
new Ordering[T] {
def compare(x: T, y: T): Int = comparator.compare(x, y)
}
導入這個和轉換,那麼你可以寫
val comparator = getComparator()
val collection = Seq("a","b")
collection.sorted(comparator)
更重要的還有隱含'Ordering.comparatorToOrdering'方法,所以你不必讓@Harper自己做,只需導入它。請參閱http://www.scala-lang.org/api/2.12.0/scala/math/Ordering$.html#comparatorToOrdering[A](implicitcmp:java.util.Comparator[A]):scala.math.Ordering [一個] – SergGr