You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala:如何将含Seq的Map转换为人名对应最大值的嵌套Map?

Scala 日期Map按人名聚合最大值的转换方法

现有Scala代码定义了Map对象d,键为日期,值是包含多个单键值对Map的Seq。需要将其转换为键仍为日期,值为以人名为键、对应日期该人名的最大值为值的Map。

输入示例

val d = Map("2020-01-30" -> Seq(Map("fff" -> 177), Map("fsdzf" -> 219), Map("fff" -> 300), Map("fff" -> 0)), 
            "2020-01-26" -> Seq(Map("fvcfdf" -> 188), Map("vav" -> 273)))

注:原输入中的日期需用字符串包裹,否则会被Scala解析为数值运算(2020-01-30会计算为1989),这里修正了格式问题保证代码可运行。

期望输出

Map("2020-01-30" -> Map("fff" -> 300, "fsdzf" -> 219), "2020-01-26" -> Map("fvcfdf" -> 188, "vav" -> 273))

解决方案代码

val result = d.map { case (date, seq) =>
  date -> seq.flatMap(_.toList)
             .groupBy(_._1)
             .map { case (name, entries) =>
               name -> entries.map(_._2).max
             }
}

代码说明

  1. 扁平化处理:seq.flatMap(_.toList)把每个单键Map转换成(人名, 数值)的元组,再将整个Seq压平,得到该日期下所有(人名,数值)的集合。
  2. 按人名分组:groupBy(_._1)将元组集合按人名分组,得到每个人名下的所有数值记录。
  3. 取最大值:对每个分组提取数值部分,用max方法取最大值,最终生成该日期下人名对应最大值的Map。

内容的提问来源于stack exchange,提问作者assa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:40:32