Scala中操作Map[String,List[Int]]的更优函数式方法求指教
函数式风格的实现方案
你原来的代码依赖可变变量和循环,确实不够贴合函数式编程的核心思路。Scala的Map自带map高阶函数,可以直接对每个键值对做转换,完全不需要手动初始化空Map并累加结果:
def f(): Map[String, List[Int]] = { data.map { case (item, prices) => item -> List(prices.min, prices.max) } }
细节说明:
data.map会遍历原Map的每一组键值对,自动处理迭代逻辑- 模式匹配
case (item, prices)直接解构键值对,分别拿到商品名和对应价格列表 - 对每个价格列表计算
min和max,组合成新List后与原商品名关联,最终返回一个全新的不可变Map
如果要兼容价格列表为空的极端场景(虽然你提到有30天数据,大概率不会出现),可以用Option做健壮性处理:
def f(): Map[String, Option[List[Int]]] = { data.map { case (item, prices) => item -> Option.when(prices.nonEmpty)(List(prices.min, prices.max)) } }
这种写法下,空列表对应的商品会返回None,非空列表则返回Some(List(min, max)),避免空列表调用min/max抛出异常。
内容的提问来源于stack exchange,提问作者Abdelrhmann02
相关产品推荐
相关产品推荐

