繁体   English   中英

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

[英]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:

https://github.com/nscala-time/nscala-time/blob/master/src/main/scala/com/github/nscala_time/time/Implicits.scala

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM