如何使用迭代器对groupBy求和?

时间:2017-01-25 19:22:51

标签: scala

给出Iterator[(String, Int)]

我想按String进行分组并将Int求和并将结果作为Map[String, Int]

返回

1 个答案:

答案 0 :(得分:4)

您可以将其转换为列表或其他严格结构:

iter.toList.groupBy(_._1).mapValues(_.map(_._2).sum)

如果您不想转换为严格的结构(强制所有条目进入内存),您可以foldLeft并随时构建地图:

(Map.empty[String,Int] /: iter) {case (acc, (k,v)) => 
  acc + (k -> acc.get(k).map(_ + v).getOrElse(v))
}