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

Scala中如何将List[(List[A], List[R])]展平为List[(List[A], R)]

Scala集合展平:将List[(List[X], List[R])]转换为List[(List[X], R)]

你需要把fromA部分的嵌套集合展平,核心是用flatMap替代map,把每个List[R]拆分成单个R并与对应的列表配对。修改后的代码如下:

lazy val rules: List[(List[Descriptor], R)] = {
    // listOfA = List[A1, A2, A3,…]
    // listOfR = List[R1, R2, R3, …]
    val fromA = listOfA.flatMap { a => 
        val descriptors = List(a.description) ++ a.subGroups.map(_.description)
        a.rules.map(r => (descriptors, r))
    } // 现在类型为List[(List[Descriptor], R)]
    val fromR = listOfR.map(r => (Nil, r)) // List[(List[Descriptor], R)]
    fromA ++ fromR
}

关键修改说明:

  1. 替换map为flatMap:map会为每个A生成一个包含List[R]的元组,而flatMap会将每个A对应的所有(descriptors, r)元组直接展平到外层列表中,消除嵌套结构。
  2. 拆分List[R]为单个R:对每个A,先构造好对应的descriptors列表,再遍历a.rules将每个R与该列表配对,生成多个独立的元组。
  3. 类型一致性:注意你原代码中List(a.description) ++ a.subGroups.map(_.description)生成的是List[Descriptor]而非List[A],如果需要List[A],可以调整为List(a) ++ a.subGroups,后续类型也需对应修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:40:35