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 }
关键修改说明:
- 替换
map为flatMap:map会为每个A生成一个包含List[R]的元组,而flatMap会将每个A对应的所有(descriptors, r)元组直接展平到外层列表中,消除嵌套结构。 - 拆分
List[R]为单个R:对每个A,先构造好对应的descriptors列表,再遍历a.rules将每个R与该列表配对,生成多个独立的元组。 - 类型一致性:注意你原代码中
List(a.description) ++ a.subGroups.map(_.description)生成的是List[Descriptor]而非List[A],如果需要List[A],可以调整为List(a) ++ a.subGroups,后续类型也需对应修改。
内容的提问来源于stack exchange,提问作者slowhand
相关产品推荐
相关产品推荐

