列表值的功能计算

时间:2012-02-13 20:10:17

标签: scala functional-programming scala-collections

我有2个包含彩票票据实例的列表。

One List持有赢得特别奖的门票,另一个List包含获得最终数字命中的门票。

现在我必须删除那些带有多余数字的门票并将奖品加在一起。

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))

如果没有临时变量,索引计数器等,在功能上执行此操作的最有效方法是什么?

1 个答案:

答案 0 :(得分: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))