我输入的内容似乎有些难看:
val maxTime = times.max(DateTimeComparator.getInstance().asInstanceOf[Comparator[DateTime]] asScala)
times
是org.joda.time.DateTime的序列。
必须有更好的方法来获取DateTime的Ordering对象。有吗?
特别是失去asInstanceOf ...
会很棒答案 0 :(得分:5)
另一种可能性是使用comparatorToOrdering
:
Ordering.comparatorToOrdering(DateTimeComparator.getInstance.asInstanceOf[Comparator[DateTime]])
我想这就是asScala
电话的作用。我知道这不漂亮: - |
(遗憾的是,由于DateTimeComparator
将Comparator
实现为原始类型,因此需要强制转换。)
答案 1 :(得分:4)
您也可以编写自己的扩展Ordering特征的类,并将其用作最大函数的输入:
class JodaDateTimeOrdering extends Ordering[org.joda.time.DateTime] {
val dtComparer = DateTimeComparator.getInstance()
def compare(x: DateTime, y: DateTime): Int = {
dtComparer.compare(x, y)
}
}
答案 2 :(得分:2)
最好的可能性,但附加依赖:Joda DateTime的NScala-Time wrapper隐含了DateTimeOrdering:
答案 3 :(得分:1)
times.max(Ordering.fromLessThan[DateTime](
DateTimeComparator.getInstance.compare(_,_) < 0))
这也很难看!
asScala
来自哪里?
其他想法
我不确定有更好的方法。 DateComparator
实现 Comparator 。
max
方法需要Ordering[DateTime]
。有序和排序在Scala中是不变的。所以我认为有必要使用asScala
。
答案 4 :(得分:0)
如果您愿意使用Saddle,那么在那里定义了一个隐含的Datetime排序,在这种情况下,这足以解决问题:
import org.saddle.time._