2012-02-13 3 views
4

У меня есть 2 списка, содержащие экземпляры лотерейных билетов.Функциональное вычисление значений списка

В одном списке есть билеты, которые выиграли специальный приз, а в другом списке - билеты, которые получили окончательные цифры.

Теперь я должен устранить эти билеты с избыточными числами и добавить призы вместе.

case class Ticket(number:Long, prize:Long) 

val specialPrizes = List(Ticket(42, 1000), Ticket(66, 2000)) 
val finalDigitPrizes = List(Ticket(42, 50)) 

Это дало бы список с присоединяемых билеты, которые сами содержат накопившиеся призы:

val finalList = List(Ticket(42, 1050), Ticket(66, 2000)) 

Что бы наиболее эффективный способ сделать это функционально без ТЕМП-Пере, индекс-счетчики, и т.д.?

ответ

9
scala> (specialPrizes ++ finalDigitPrizes).groupBy(_.number).map { 
    | case (n, ts) => Ticket(n, ts.map(_.prize).sum) 
    | } 
res1: scala.collection.immutable.Iterable[Ticket] = List(Ticket(42,1050), Ticket(66,2000)) 
+0

'groupBy' снова выигрывает. Я всегда должен это использовать. –

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