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

Scala中如何扁平化List[Any, List[]]?特定嵌套列表转换

嘿,我来帮你搞定这两个Scala列表处理的问题!

针对给定示例的转换

先看你给出的具体代码:

val xs = List(List(4, List(4, 7)), List(3, List(3, 5)), List(4, List(5, 9)))

要把它转换成List(List(4, 4, 7), List(3, 3, 5), List(4, 5, 9)),核心是处理每个子列表的结构——每个子列表都是「单个整数 + 整数列表」的组合。

你可以用map配合模式匹配来实现,代码很直观:

val result = xs.map {
  case List(num: Int, subList: List[Int]) => num :: subList
}

代码解释

  • map遍历xs中的每一个子列表
  • 模式匹配List(num: Int, subList: List[Int])精准解构出子列表里的单个整数和嵌套的整数列表
  • 用::把单个整数放到嵌套列表的头部,刚好拼成你想要的扁平子列表

如果想更安全(比如避免不符合结构的子列表导致运行时异常),可以换成collect,它会自动过滤掉不匹配模式的元素:

val result = xs.collect {
  case List(num: Int, subList: List[Int]) => num :: subList
}

通用的扁平化嵌套列表(List[Any]类型)

如果你的列表是更通用的List[Any](里面混合了基本类型和任意层数的嵌套列表),比如List(1, List(2, List(3)), 4, "hello"),想要把它完全扁平化成只包含非列表元素的列表,可以写一个递归函数:

def flattenAnyList(list: List[Any]): List[Any] = list.flatMap {
  case subList: List[_] => flattenAnyList(subList) // 递归扁平化子列表
  case element => List(element) // 单个元素包装成列表,方便flatMap拼接
}

如果只关心整数类型的扁平化(过滤掉非整数、非列表的元素),可以调整成:

def flattenIntList(list: List[Any]): List[Int] = list.flatMap {
  case subList: List[_] => flattenIntList(subList)
  case num: Int => List(num)
  case _ => Nil // 忽略非整数、非列表的元素
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:45:36