Scala 如何按列表中的键分组

Scala 如何按列表中的键分组,scala,Scala,我在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[(S

我在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)]

它可能已经在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)
给定列表:

scala> list.groupBy(_._1).mapValues(_.map(_._2).sum)
res13: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 3, cbe -> 5)
使用,

在Scala中回复:

scala> list.groupBy(_._1).mapValues(_.map(_._2).sum)
res13: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 3, cbe -> 5)

如果您正在尝试scala REPL,请将所有内容放在一行中,这样做可能会很容易。这是直接从我的回复,所以它必须工作
scala> list.groupBy(_._1).mapValues(_.map(_._2).sum)
res13: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 3, cbe -> 5)