我有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))
如果没有临时变量,索引计数器等,在功能上执行此操作的最有效方法是什么?
答案 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))