我正在尝试在 Java 集合库中使用 Scala 元组,该库要求其元素为Comparable
. 我知道最近版本的 Scala允许通过math.Ordering.Implicits
. 但是,看起来不存在从 ScalaOrdering[T]
到 Java 的默认转换Comparable[T]
。无论我是否导入了元组排序,我都会收到错误消息java.lang.ClassCastException: scala.Tuple2 cannot be cast to java.lang.Comparable
。
有没有办法自动将Ordered
orOrdering
类型转换为Comparable
?如果没有,是否可以更具体地Comparable
以字典方式制作元组?我正在寻找比创建自定义案例类更好的东西,以实现Comparable
更多通用性并减少样板和印刷噪音((a, b, c)
比 更清洁和更容易键入BeanLikeClassWithComparable(a, b, c)
)。
编辑:我尝试使用J Cracknell 的解决方案,但无济于事(我收到与上述相同的错误)。我已经发布了Wrapped
该类的尝试实现;对于配对来说,这是一个不太通用的实现,并且似乎不起作用。
import scala.math.Ordering.Implicits._
case class OrderedPair[A <: Ordered[A], B <: Ordered[B]](elem: (A, B))
extends Ordered[OrderedPair[A, B]] {
override def compare(that: OrderedPair[A, B]): Int =
implicitly[Ordering[(A, B)]].compare(this.elem, that.elem)
}
implicit def tuple2ToOrdered[A <: Ordered[A], B <: Ordered[B]](x: (A, B)) = OrderedPair(x)