簡體   English   中英

將Java比較器轉換為Scala排序

[英]Convert Java Comparator to Scala Ordering

我正在尋找一種將Java Comparator轉換為scala Ordering的簡單且優雅的方法。

用例:

我有一個Scala集合,我想使用Java代碼中定義的比較器進行排序:

val comparator = getComparator()
val collection = Seq("a","b")
collection.sorted(???)

如果我沒記錯的話, 訂購伙伴會包含從Comparable [A]到Ordering [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

標准庫中已經存在隱式轉換: scala.math.Ordering.comparatorToOrdering

您只需要導入即可使用它:

import scala.math.Ordering.comparatorToOrdering

val comparator = getComparator()
val collection = Seq("a","b")
collection.sorted(comparator)

到目前為止,我發現的最好方法是在java.util.Comparator和Ordering之間定義自己的隱式轉換

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM