gpt4 book ai didi

java - Tree实现java中递归函数调用转换为lambda表达式

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

我进行了一个学习 java 8 的 lambda 表达式的案例研究,它是通用 N 数组树实现。我有一个递归函数来获取树中存在的节点总数。这一点让我感到震惊。

public class GenericTree<T> {

private GenericTreeNode<T> root;

public GenericTree() {
super();
}

public GenericTreeNode<T> getRoot() {
return this.root;
}

public void setRoot(GenericTreeNode<T> root) {
this.root = root;
}

public int getNumberOfNodes() {
int numberOfNodes = 0;

if(root != null) {
numberOfNodes = getNumberOfnodeRecursiveFunc(root) + 1; //1 for the root!
}

return numberOfNodes;
}

private int getNumberOfnodeRecursiveFunc(GenericTreeNode<T> node) {
Integer numberOfNodes = node.getNumberOfChildren();

for(GenericTreeNode<T> child : node.getChildren()) {
numberOfNodes += getNumberOfnodeRecursiveFunc(child);
}

//node.getChildren().stream().map(child ->this.getNumberOfnodeRecursiveFunc(child));

//return node.getNumberOfChildren() + node.getChildren().stream().collect(Collectors.summingInt(GenericTree::getNumberOfnodeRecursiveFunc));
}}

如何使用 lambda 表达式递归地获取节点数,而不是使用代码片段中提到的传统方法?

注意:我遇到了多个其他问题,它们提供了简单的阶乘表达式。因此请对此提供一些更深入的见解

最佳答案

假设您的问题是如何将 getNumberOfnodeRecursiveFunc“翻译”为 lambda(代码似乎正确,所以我猜这就是您所要求的),可能的解决方案可能是:

private int getNumberOfnodeRecursiveFunc(GenericTreeNode<T> node) {
return node.getNumberOfChildren() + node.getChildren().stream().collect(Collectors.summingInt(Test::getNumberOfnodeRecursiveFunc));
}

您必须将 Test 更改为适当的类名称才能使方法引用起作用。

您使用 collect进行约简并得到树中的节点数。

我想这已经足够了。

更新

要解决编译器错误,您可以尝试两种方法:

  • getNumberOfnodeRecursiveFunc 设为静态(我想这不是一个选项)
  • 用 lambda 替换方法引用。

    private int getNumberOfnodeRecursiveFunc(MyNode node) {
    return node.getNumberOfChildren() + node.getChildren().stream().collect(Collectors.summingInt(n - > getNumberOfnodeRecursiveFunc(n)));
    }

关于java - Tree实现java中递归函数调用转换为lambda表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40447577/

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