如何通过Map中的键添加值

时间:2019-07-28 05:33:41

标签: scala

说我有一张这样的地图:

val testMap =Map("Sita" -> 1,"Sita" -> 2,"Ram" -> 3,"Ram" -> 4,"Shyam" -> 5)

我希望输出为: Map("Sita" -> 3,"Ram" -> 7,"Shyam" -> 5)

2 个答案:

答案 0 :(得分:1)

@jwvh指出的第一个问题是此Map仅具有3个值,因为不能重复使用键。较早的键/值对将替换为具有相同键的较晚的键/值对。

要解决此问题,请以List而非Map开头:

val testList = List("Sita" -> 1, "Sita" -> 2, "Ram" -> 3, "Ram" -> 4, "Shyam" -> 5)

然后,您可以使用groupBy来收集具有相同键的值,然后计算分组值的总和:

testList.groupBy(_._1).map{ case (k, v) => k -> v.map(_._2).sum }

这将为您提供所需的Map

答案 1 :(得分:1)

您的地图包含重复的键。

val testMap = Map("Sita" -> 1, "Sita" -> 2, "Ram" -> 3, "Ram" -> 4, "Shyam" -> 5)      

地图包含重复密钥时会发生以下情况:

如果映射先前包含键的映射,则旧值将替换为指定值。

所以

"Sita" -> 1 will be replaced by "Sita" -> 2 and

"Ram" -> 3 will be replaced by "Ram" -> 4

只需打印您将获得的testMap

Map(Sita -> 2, Ram -> 4, Shyam -> 5)

因此,我认为无法使用单个Map来完成。