Scala如何用groupBy和mapValues将元组列表转为值为Int列表的Map
解决方案
你可以直接搭配groupBy和mapValues实现需求,示例代码如下:
val result = temp.groupBy(_._1).mapValues(_.map(_._2))
如果使用的是Scala 2.12及更早版本,mapValues默认返回惰性视图,若需要立即计算得到严格的Map结果,可以追加调用.toMap:
val result = temp.groupBy(_._1).mapValues(_.map(_._2)).toMap
如果你使用Scala 2.13及以上版本,还可以用更简洁的groupMap方法一步完成操作,性能也更优:
val result = temp.groupMap(_._1)(_._2)
方法说明
groupBy(_._1):按元组的第一个元素(字符串值)分组,得到的Map值为对应分组下的全部元组列表mapValues(_.map(_._2)):对每个分组的元组列表做转换,只保留每个元组的第二个元素(整数值)groupMap是Scala 2.13新增的API,相当于把groupBy和mapValues的逻辑合并,避免生成中间的元组列表,执行效率更高
运行以上代码得到的结果就是你需要的格式:
Map(string1 -> List(int1, int3), string2 -> List(int2))
内容的提问来源于stack exchange,提问作者KaiJun
相关产品推荐
相关产品推荐

