2014-11-04 39 views
0

我有一套我創建的某個dto。scala排序某一類的集合

的DTO被命名爲「NumericValue」,並具有以下類成員: 1)時間:龍 2)值:雙

我有一組命名爲「點」,我想對它進行排序根據增加的時間,即0,1,2,4,100,...

附上代碼:

val points: set(NumericValue) = numericValueSet 

val setSorted = collection.immutable.SortedSet[Long]() ++ points 

我做了以下:

但是結果並不按時間排序。

感謝

回答

9

結果不是不排序,因爲沒有Ordering爲你的類。

可以明確的實施Ordered

case class NumericValue(time: Long, value: Double) extends Ordered[NumericValue] { 
    override def compare(that: NumericValue): Int = 
    Ordering[Long].compare(this.time, that.time) 
} 

或您設定的創建Ordering

val set = SortedSet[NumericValue]()(new Ordering[NumericValue]() { 
    override def compare(x: NumericValue, y: NumericValue): Int = 
    Ordering[Long].compare(x.time, y.time) 
}) 

結果應下令:

set + NumericValue(345, 45) + NumericValue(453, 123) + NumericValue(5, 5) 

res0: scala.collection.SortedSet[NumericValue] = TreeSet(NumericValue(5,5.0), NumericValue(345,45.0), NumericValue(453,123.0)) 
+0

它的工作。非常感謝你的洞察力。 – user3370773 2014-11-04 11:51:23