gpt4 book ai didi

java - 以函数式风格递归遍历对象链

转载 作者:行者123 更新时间:2023-11-30 06:24:58 24 4
gpt4 key购买 nike

命令式编码风格中常见的循环模式是遵循一系列对象来找到结尾,例如:

private ThreadGroup rootOf(ThreadGroup leaf) {
ThreadGroup rootGroup = leaf;
ThreadGroup parentGroup;
while ((parentGroup = rootGroup.getParent()) != null) {
rootGroup = parentGroup;
}
return rootGroup;
}

(来自 this answer )

我觉得一定有一个标准的功能模式在逻辑上与此等效,但我不确定它是什么。我使用 Vavr's Option 提出了下面的递归方法:

private ThreadGroup rootOf(ThreadGroup leaf) {
return Option.of(leaf.getParent()) // returns None for null
.map(this::rootOf)
.getOrElse(leaf);
}

但似乎应该有一种方法可以在没有显式递归的情况下做到这一点,特别是在像 Java 这样没有尾部调用优化的语言中(我想象一些类似于 foldLeft()但在迭代计算的值(value)流上,这是否有意义?)

这里的标准功能方法是什么?

最佳答案

Stream.iterate + 过滤应该可以做到:

Stream.iterate(leaf, ThreadGroup::getParent)
.filter(g -> g.getParent() == null)
.findFirst().get();

关于java - 以函数式风格递归遍历对象链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47361223/

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