2015-04-01 3 views
3

Здравствуйте, я учусь Scala и у меня есть Seq объекта следующего класса случае:Scala объединить Seq меток времени

case class HistoryCounter(time: DateTime, counter:Int) 

Теперь я хотел бы объединить значение counter на основе временной метки time. Чтобы получить сумму всех прилавков, где time находится в тот же день или на той же неделе.

Как вы можете это сделать? Является ли одна из функций сбора, таких как сгиб или карта, способными это сделать?

+0

Я думаю, что 'groupBy' является то, что вы хотите, за которым следует 'mapValues' – cmbaxter

ответ

5

Если у вас List этих классов случае называемых list, один из способов сделать это так:

val counts = 
    list.groupBy(_.time).map{ 
     case (k, v) => (k, v.map(_.counter).sum) 
    } 

Или более кратко:

list.groupBy(_.time).mapValues(_.map(_.counter).sum) 
+0

@DidierDuport, вы не можете вызывать сумму на' v', это не список int, а список 'HistoryCounter' – cmbaxter

+0

Извините, я должен был оставить комментарий и не сделать редактирование. Хорошо, как сейчас. благодаря –

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