[英]How to convert DateTimeComparator to an Ordering[DateTime] in Scala
我输入的内容似乎有些难看:
val maxTime = times.max(DateTimeComparator.getInstance().asInstanceOf[Comparator[DateTime]] asScala)
times
是org.joda.time.DateTime的序列。
必须有更好的方法来获取DateTime的Ordering对象。 在那儿?
特别是失去asInstanceOf会很棒......
另一种可能性是使用comparatorToOrdering
:
Ordering.comparatorToOrdering(DateTimeComparator.getInstance.asInstanceOf[Comparator[DateTime]])
我想这就是asScala
调用的功能。 我知道这不漂亮: - |
(不幸的是需要DateTimeComparator
因为DateTimeComparator
Comparator
实现为原始类型。)
您还可以编写自己的类来扩展Ordering特征,并将其用作最大函数的输入:
class JodaDateTimeOrdering extends Ordering[org.joda.time.DateTime] {
val dtComparer = DateTimeComparator.getInstance()
def compare(x: DateTime, y: DateTime): Int = {
dtComparer.compare(x, y)
}
}
最好的可能性,但有额外的依赖性:Joda DateTime的NScala-Time包装器隐含了DateTimeOrdering:
times.max(Ordering.fromLessThan[DateTime](
DateTimeComparator.getInstance.compare(_,_) < 0))
这也是丑陋的!
你的asScala
来自哪里?
额外的想法
我不确定有更好的方法。 DateComparator
实现Comparator 。
max
方法需要Ordering[DateTime]
。 有序和排序在Scala中是不变的。 所以我认为有必要使用asScala
。
如果您愿意使用Saddle,那么在那里定义了一个隐含的Datetime排序,在这种情况下,这足以解决问题:
import org.saddle.time._
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.