如何在Scala中使用flatMap将Map展平为键值对序列?
使用Scala的flatMap展开Map为键值对序列
首先修正你给出的Map构造代码(原写法中值是元组而非Seq,会导致类型不匹配):
val map = Map("A" -> Seq("1", "2", "3", "4"), "B" -> Seq("2", "3"), "C" -> Seq("3", "4"))
要通过flatMap实现将每个键与对应序列中的元素逐一配对,生成目标序列,可以这样写:
val result = map.flatMap { case (key, values) => values.map(value => (key, value)) }
代码说明:
flatMap会遍历Map中的每一组键值对,接收一个处理函数。- 模式匹配
case (key, values)解构出当前的键和对应的元素序列。 - 对每个
values序列,用map将其中的每个元素转换为(key, value)形式的元组,生成一个临时的小序列。 flatMap会自动把所有临时小序列"扁平化"合并成一个大的序列,最终得到你需要的结果。
执行后result的输出为:
List((A,1), (A,2), (A,3), (A,4), (B,2), (B,3), (C,3), (C,4))
注:你给出的期望输出中("B", "2")重复了一次,这应该是笔误,上述代码不会产生重复项。
内容的提问来源于stack exchange,提问作者Giga
相关产品推荐
相关产品推荐

