如何在Scala中定义排序?

41

我有一个 val hm: HashMap[org.joda.time.DateTime, MyType],我想通过 hm.keys.minhm.keys.max 获取集合中的第一个和最后一个 DateTime,但编译器提示 No implicit Ordering defined for org.joda.time.DateTime。如何定义这个排序(隐式和显式选项都很有趣)?

2个回答

102
object Joda {
    implicit def dateTimeOrdering: Ordering[DateTime] = Ordering.fromLessThan(_ isBefore _)
}

// elsewhere
import Joda._
dateTimes.sorted

17
为了方便在Scala中使用Joda DateTime,创建了nscala-time:https://github.com/nscala-time/nscala-time 将其包含到项目中后:
libraryDependencies += "com.github.nscala-time" %% "nscala-time" % "1.8.0"

你可以直接导入OrderingImplicits。要么一次性导入所有内容:

import com.github.nscala_time.time.OrderingImplicits._

或者一个特定的:

import com.github.nscala_time.time.OrderingImplicits.DateTimeOrdering

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接