下面的代码假设是对元组列表的值求和,但是当两个或多个元组包含相同的值时,元组只输出一次:
var data = List((1, "1") , (1, "one")) //> data : List[(Int, java.lang.String)] = List((1,1), (1,one))
data = data.groupBy(_._2).map {
case (label, vals) => (vals.map(_._1).sum, label)
}.toList.sortBy(_._1).reverse
println(data) //> List((1,1))
当我期待List((1,1))
List((1,1) , (1,"one"))
是否需要调整groupBy函数参数来解决此问题?
答案 0 :(得分:3)
实际上,它确实表现得如预期。 groupBy
返回一张地图。当您map
在地图上时,您构建了一张新地图,当然,每张地图都是唯一的。在这里,您有两次密钥1
...
然后,您应在致电toList
之前致电map
,而不是之后。