如何将DateTimeComparator转换为Scala中的Ordering [DateTime]

时间:2011-04-23 01:46:51

标签: scala jodatime

我输入的内容似乎有些难看:

val maxTime = times.max(DateTimeComparator.getInstance().asInstanceOf[Comparator[DateTime]] asScala)

times是org.joda.time.DateTime的序列。

必须有更好的方法来获取DateTime的Ordering对象。有吗?

特别是失去asInstanceOf ...

会很棒

5 个答案:

答案 0 :(得分:5)

另一种可能性是使用comparatorToOrdering

Ordering.comparatorToOrdering(DateTimeComparator.getInstance.asInstanceOf[Comparator[DateTime]])

我想这就是asScala电话的作用。我知道这不漂亮: - |

(遗憾的是,由于DateTimeComparatorComparator实现为原始类型,因此需要强制转换。)

答案 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)

答案 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._