我正在尝试在 Java 集合库中使用 Scala 元组,该库要求其元素为Comparable. 我知道最近版本的 Scala允许通过math.Ordering.Implicits. 但是,看起来不存在从 ScalaOrdering[T]到 Java 的默认转换Comparable[T]。无论我是否导入了元组排序,我都会收到错误消息java.lang.ClassCastException: scala.Tuple2 cannot be cast to java.lang.Comparable。
有没有办法自动将OrderedorOrdering类型转换为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)