Kotlin复制列表中的项目以创建具有相同数据的不同对象的新列表

vuktfyat  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(142)

我有两个数据结构:

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

我有一个包含MyObjectA项的列表:

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

我想得到一个列表,其中每个对象都是重复的,但每个新项目只包含一些原始数据:

val mylistB = listOf(
    MyObjectB("aaa", "bbb"),
    MyObjectB("aaa", "ccc"),
    MyObjectB("ddd", "eee"), 
    MyObjectB("ddd", "fff")
)

在Kotlin中有没有一些扩展函数可以简单地做到这一点?

xeufq47z

xeufq47z1#

我会这样做:

data class MyObjectA(val foo: String, val barA: String, val barB: String) {
    fun toB() = listOf(MyObjectB(foo, barA), MyObjectB(foo, barB))
}
data class MyObjectB(val foo: String, val bar: String)

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

    val myListB = mylistA.flatMap { it.toB() }

    println(myListB)
}

如果不想将toB()函数添加到数据类中,当然也可以直接执行,如

val myListB = mylistA.flatMap { listOf(MyObjectB(it.foo, it.barA), MyObjectB(it.foo, it.barB)) }

相关问题