如何用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
相关产品推荐
相关产品推荐

