【问题标题】:How to define an Ordering in Scala?如何在 Scala 中定义排序?
【发布时间】:2019-01-28 08:25:44
【问题描述】:
拥有val hm: HashMap[org.joda.time.DateTime, MyType] 我试图分别通过hm.keys.min 和hm.keys.max 获得集合的第一个和最后一个DateTime,但编译器说No implicit Ordering defined for org.joda.time.DateTime。如何定义这种排序(隐式和显式选项都很有趣)?
【问题讨论】:
标签:
scala
sorting
scala-collections
【解决方案1】:
object Joda {
implicit def dateTimeOrdering: Ordering[DateTime] = Ordering.fromLessThan(_ isBefore _)
}
// elsewhere
import Joda._
dateTimes.sorted
【解决方案2】:
为了便于在 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