让我们说有以下地图数据
val testMap: Map[String, Int] = Map("AAA_abc" -> 1,
"AAA_anghesh" -> 2,
"BBB_wfejw" -> 3,
"BBB_qgqwe" -> 4,
"C_fkee" -> 5)
现在我想通过key.split("_").head
缩小地图,并添加相等的键的所有值。因此,对于此示例,Map
应该导致:
Map(AAA -> 3, BBB -> 7, C -> 5)
在Scala中这样做的正确方法是什么?
我尝试使用groupBy
和reduceLeft
构建但无法找到解决方案。
答案 0 :(得分:1)
这是一种方法:
testMap.groupBy(_._1.split("_").head).mapValues(_.values.sum)
答案 1 :(得分:1)
一遍中的变化:
testMap.foldLeft(Map[String,Int]())( (map, kv) => {
val key = kv._1.split("_").head
val previous = map.getOrElse(key,0)
map.updated(key, previous + kv._2) })