如何在Scala中的csv值列表中对值进行求和?

时间:2013-06-14 20:40:52

标签: java scala

我有一个名称逗号分隔名称值对的列表,其中一些重复:

10, test1
11, test2
12, test3
13, test1
14, test2

我想总结重复的值(按降序排列),上面的列表变为:

25, test2
23, test1
12, test3

在java中,我将创建一个新列表并迭代现有列表。列表中的每个元素将与每个其他元素进行比较,如果任何名称匹配,则将值相加,一旦到达列表的末尾,则将此新元素添加到新列表中。如果没有元素匹配(元素是唯一的),则添加此元素及其值。完成后,我会使用某种比较器对List进行排序。

在Scala中是否有更实用的方法可以使用过滤方法?

2 个答案:

答案 0 :(得分:4)

假设您已经使用以下内容解析了CSV:

val data = List((10, "test1"), (11, "test1"), ...)

您现在可以:

data.groupBy(_._2).map {
  case (label, vals) => (vals.map(_._1).sum, label)
}.toList.sortBy(_._2)

这就是一切。

答案 1 :(得分:1)

您可以先使用groupBy将值收集到地图中,然后使用mapValues计算您需要的答案,这只是本例中的总和。

另请注意,这里的团队名称是关键,总和是值,但这并不重要(?)。