2014-11-04 2 views
0

У меня есть набор определенного dto я создал.scala сортировать набор определенного класса

DTO назван «NumericValue», и имеет следующие члены класса: 1) Время: Long) значение 2: Double

Я набор под названием «точки», и я хочу, чтобы отсортировать его в соответствии с увеличением времени, то есть 0, 1, 2, 4, 100, ...

прилагается код:

val points: set(NumericValue) = numericValueSet 

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

Я сделал следующее:

Однако результат не сортируется в зависимости от времени.

Благодаря

ответ

9

Результат не Unsorted, потому что не 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

Смежные вопросы