我在查找简单优雅的方式将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