Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin-递归获取所有子级_Kotlin - Fatal编程技术网

Kotlin-递归获取所有子级

Kotlin-递归获取所有子级,kotlin,Kotlin,我是科特林的新手,我正试图找到让所有孩子都参与进来的最佳方式 我有这个数据类 data class BigObj(val id: Int, val text: String, val parentId: Int?, val children: ArrayList<BigObj>) Kotlin也有类似的功能吗?Kotlin也在中实现了惰性集合处理。 stdlib中没有SelectRecursive函数,但您可以自己定义它: fun Sequence.selectRecursive(

我是科特林的新手,我正试图找到让所有孩子都参与进来的最佳方式

我有这个数据类

data class BigObj(val id: Int, val text: String, val parentId: Int?, val children: ArrayList<BigObj>)

Kotlin也有类似的功能吗?

Kotlin也在中实现了惰性集合处理。 stdlib中没有
SelectRecursive
函数,但您可以自己定义它:

fun Sequence.selectRecursive(recursiveSelector:T.()->Sequence):Sequence=flatMap{
序列{
产量(it)
yieldAll(it.recursiveSelector().selectRecursiveSelector(recursiveSelector))
}
}
现在,您可以通过以下简单方式将
BigObj
s的列表(或任何
Iterable
)转换为所需的平面序列:

val-result:Sequence=source.asSequence().selectRecursive{children.asSequence()}

看起来它只下降了一级。如果孩子有自己的孩子-代码不起作用。哎呀!修好了。
 foreach (var parent in source)
        {
            yield return parent;

            var children = selector(parent);
            foreach (var child in SelectRecursive(children, selector))
                yield return child;
        }