1
在必要的编码风格的常见循环模式是遵循对象链查找结束时,例如:走对象链递归函数式
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()
模糊不清,但在迭代计算的价值流上,如果这有什么意义呢?)
这里的标准功能方法是什么?
而这个工程,因为该滤波器可以确保我们只迭代,直到我们达到根,然后停止我们NPE过吗? –
是的。这正是如此。 – vandale
如果树为空,则引发NoSuchElementException。可能用'''.headOption()'''替代''.findFirst()。get()'''并可能添加'''.filter(Objects :: nonNull)'''? – Zaaier