gpt4 book ai didi

kotlin - Kotlin FlatMap &&递归

转载 作者:行者123 更新时间:2023-12-02 13:23:14 26 4
gpt4 key购买 nike

我有一个树的数据结构。每个项目都有 child ,他们可能有 child 等:

class NavigationItem(
val title: String,
val parent: NavigationItem?
) {
val children: MutableList<NavigationItem> = mutableListOf()
val isLeaf: Boolean
get() = children.count() == 0

val allChildren: List<NavigationItem>
get() = children.flatMap {
it.allChildren
}
}

我假设 allChildren综合属性将遍历图形,将 allChildren属性映射到其子级中,并一直进行下去。

这不是正在发生的事情:
@Test
fun testAllChildrenProperty() {
val root = NavigationItem("Root", null).apply {
children.add(NavigationItem("Level 1", this))
children.add(NavigationItem("Level 1", this))
}
assertEquals(2 ,root.allChildren.count())
}

此单元测试失败-我们只是为allChildren得到一个空列表。谁能解释A)kotlin中的flatMap做什么,以及B)我应该改用什么?

最佳答案

您对flatMap函数的理解似乎是正确的,并且您对递归的使用也很好。问题是,尽管您递归遍历所有子项,但实际上从未将它们中的任何一个添加到返回列表中!

这个怎么样?

val allChildren: List<NavigationItem>
get() = children + children.flatMap { it.allChildren }

请注意 children +的包含,这可确保每个子项及其所有子项都添加到返回列表中。

如果存在循环的可能性,则需要添加一些更复杂的逻辑。

关于kotlin - Kotlin FlatMap &&递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50971124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com