2011-04-23 59 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._