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

如何用Kotlin扩展函数将MyObjectA列表转换为指定MyObjectB列表?

Kotlin 实现列表转换的简洁方案

可以用Kotlin标准库中的flatMap扩展函数来实现这个需求,它能将每个元素映射为一个元素集合,再把所有集合扁平合并成一个列表,完美匹配“一个MyObjectA生成两个MyObjectB”的场景。

完整实现代码

data class MyObjectA(val foo: String, val barA: String, val barB: String)
data class MyObjectB(val foo: String, val bar: String)

val mylistA = listOf(
    MyObjectA("aaa", "bbb", "ccc"), 
    MyObjectA("ddd", "eee", "fff")
)

val mylistB: List<MyObjectB> = mylistA.flatMap { a ->
    listOf(
        MyObjectB(a.foo, a.barA),
        MyObjectB(a.foo, a.barB)
    )
}

// 输出验证
println(mylistB)
// 结果:[MyObjectB(foo=aaa, bar=bbb), MyObjectB(foo=aaa, bar=ccc), MyObjectB(foo=ddd, bar=eee), MyObjectB(foo=ddd, bar=fff)]

代码说明

  • flatMap遍历mylistA中的每个MyObjectA实例,将每个实例转换成包含两个MyObjectB的列表。
  • 最终所有子列表会被自动合并为一个单一的List<MyObjectB>,无需额外调用flatten()(flatMap已经包含了扁平化的逻辑)。

如果想拆分步骤,也可以用map加flatten()的组合写法,但flatMap是更简洁的选择:

val mylistB = mylistA.map { a ->
    listOf(MyObjectB(a.foo, a.barA), MyObjectB(a.foo, a.barB))
}.flatten()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:12:02