我在Scala中有一个列表,想要按一个键分组并汇总每个键的值:
val l = List(("abc",1),("abc",2),("cbe",5),("cab",1))
我尝试了以下代码:
l.groupBy(identity).mapValues(_.sum)
但是出现以下错误:
error: type mismatch;
found : scala.collection.immutable.Map[(String, Int),Int]
required: Seq[(String, Int)]
答案 0 :(得分:2)
它可能已经在stackoverflow中得到了回答,但是您将其分组然后求和list的值。
scala> val l = List(("abc",1),("abc",2),("cbe",5),("cab",1))
.groupBy(_._1)
.map { case (k, v) => k -> v.map { _._2}.sum}
l: scala.collection.immutable.Map[String,Int] = HashMap(cbe -> 5, abc -> 3, cab -> 1)
答案 1 :(得分:1)
提供列表:
val list = List(("abc",1),("abc",2),("cbe",5),("cab",1))
使用
list.groupBy(_._1).mapValues(_.map(_._2).sum)
在Scala REPL中:
scala> list.groupBy(_._1).mapValues(_.map(_._2).sum)
res13: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 3, cbe -> 5)