groupby不按预期行事

时间:2013-06-19 10:49:35

标签: scala

下面的代码假设是对元组列表的值求和,但是当两个或多个元组包含相同的值时,元组只输出一次:

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函数参数来解决此问题?

1 个答案:

答案 0 :(得分:3)

实际上,它确实表现得如预期。 groupBy返回一张地图。当您map在地图上时,您构建了一张新地图,当然,每张地图都是唯一的。在这里,您有两次密钥1 ...

然后,您应在致电toList之前致电map,而不是之后。