2011-04-23 70 views
4

我刚才输入这个似乎有点难看:如何DateTimeComparator转换为订购[DATETIME]在斯卡拉

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

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

必须有更好的方法来获得DateTime的Ordering对象。在那儿?

尤其是它会是巨大的,失去了asInstanceOf ...

+0

请参考[?如何定义在Scala中的排序] (http://stackoverflow.com/questions/9061141/how-to-define-an-ordering-in-scala) – 2016-11-11 19:16:55

回答

1
times.max(Ordering.fromLessThan[DateTime](
    DateTimeComparator.getInstance.compare(_,_) < 0)) 

这是丑陋呢!

您的asScala从哪里来?

更多的想法

我不知道有更好的办法。 DateComparator器具比较器

max方法预计为Ordering[DateTime]。有序和排序在Scala中是不变的。所以我认为这种情况是必须使用asScala

+0

asScala来自scalaj.collection,它有一堆scala <-> java转换器 – 2011-04-23 13:00:09

5

另一种可能性是使用comparatorToOrdering

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

我想这就是asScala电话做什么。这不是更漂亮,我知道: - |

(演员不幸必需的,因为DateTimeComparator工具Comparator原始类型。)

4

你也可以编写自己的课程来扩展订购特质,并将其用作最大功能的输入:

class JodaDateTimeOrdering extends Ordering[org.joda.time.DateTime] { 
    val dtComparer = DateTimeComparator.getInstance() 

    def compare(x: DateTime, y: DateTime): Int = { 
    dtComparer.compare(x, y) 
    } 
} 
0

如果你愿意用鞍,有定义有一个隐含的日期时间排序,在这种情况下,这是足以解决问题:

import org.saddle.time._