list - 将 child 放在一个列表中

标签 list algorithm kotlin listview tree

请告诉我如何在这样的数据结构中(为了更好地理解而简化)将实体的所有子项放入一个列表中:

    fun main() {
    val listOfEntities = listOf(
        Entity(
            name = "John",
            entities = listOf(
                Entity(
                    name = "Adam",
                    entities = listOf()
                ),
                Entity(
                    name = "Ivan",
                    entities = listOf(
                        Entity(
                            name = "Henry",
                            entities = listOf(
                                Entity(
                                    name = "Kate",
                                    entities = listOf(
                                        Entity(
                                            name = "Bob",
                                            entities = listOf()
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )

    val result = listOfEntities.flatMap { it.entities }.map { it.name }
    println(result)
}

data class Entity(
    val name: String,
    val entities: List<Entity>
)

我希望看到以下结果:

[John, Adam, Ivan, Henry, Kate, Bob]

我尝试使用 flatMap,但没有达到预期的结果。

提前谢谢您!

最佳答案

您可以像这样递归地遍历实体树:

fun List<Entity>.flattenEntities(): List<Entity> =
    this + flatMap { it.entities.flattenEntities() }

然后你就可以打电话了

val result = listOfEntities.flattenEntities().map { it.name }

获得想要的结果。

关于list - 将 child 放在一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71601819/

相关文章:

java arraylist 包含对象的类型

algorithm - 重新缩放整数向量

functional-programming - Kotlin 中的内存功能

kotlin - 为什么我不能使用try/catch来捕获Kotlin协程中的异常?

python - 使用递归反转列表不会给出预期的输出

无法推到列表后面

python - 计算落在一组 x、y、z 坐标之间的值的数量

c - 如何找到数组中大于其后所有元素的元素数?

javascript - 检查是否所有图 block 都已连接

android - 为什么作者再次在项目中添加taskRepository?:?