我有这个功能:
def getTime() : ArrayBuffer[Timestamp] = {
val offset = Timestamp.valueOf("2015-01-01 00:00:00").getTime()
val end = Timestamp.valueOf("2015-01-02 00:00:00").getTime()
val diff = end - offset + 1
val mList = ArrayBuffer[Timestamp]()
val numRecords = 3
var i = 0
while (i < numRecords) {
val rand = new Timestamp(offset + (Math.random() * diff).toLong)
mList += rand
i += 1
}
// mList.toList.sortWith(_ < _);
// scala.util.Sorting.quickSort(mList.toArray);
}
我试图对数组进行排序,但却没有。我收到这个错误:
No implicit Ordering defined for java.sql.Timestamp.
我知道我需要定义如何完成排序。有没有办法像Java一样轻松地对它进行排序:Collections.sort(list); 或者使用Scala有更好的方法?
答案 0 :(得分:17)
或者,在课堂的某个地方定义它,你就可以了:
implicit def ordered: Ordering[Timestamp] = new Ordering[Timestamp] {
def compare(x: Timestamp, y: Timestamp): Int = x compareTo y
}
getTime().sorted // now this will work just fine
答案 1 :(得分:5)
mList.sortWith(_.compareTo(_) < 1)
请注意,使用匿名函数,您可以传递一个显式函数,如下所示:
def comparator(first: Timestamp, second: Timestamp) = first.compareTo(second) < 1
mList.sortWith(comparator)
Timestamp本身没有隐式排序,这里我们只是使用compareTo
方法进行排序。
感谢@Nick指出getTime()
上的排序在所有情况下都不够。我还查看了您希望使用的before
方法,但这只是使用了纪元值进行比较。