java - 使用 Java 8 实现递归 lambda 函数

标签 java recursion lambda java-8

Java 8 引入了 lambda 函数,我想实现阶乘之类的东西:

 IntToDoubleFunction fact = x -> x == 0 ? 1 : x * fact.applyAsDouble(x-1);

编译返回

  error: variable fact might not have been initialized

如何引用函数本身。类是匿名的,但实例存在:它被称为fact

最佳答案

我通常使用(一次定义所有功能接口(interface))通用帮助器类,它包装功能接口(interface)类型的变量。 这种方式解决了局部变量初始化的问题,并且让代码看起来更清晰。

对于这个问题,代码将如下所示:

// Recursive.java
// @param <I> - Functional Interface Type
public class Recursive<I> {
    public I func;
}

// Test.java
public double factorial(int n) {

    Recursive<IntToDoubleFunction> recursive = new Recursive<>();
    recursive.func = x -> (x == 0) ? 1 : x * recursive.func.applyAsDouble(x - 1);

    return recursive.func.applyAsDouble(n);
}

关于java - 使用 Java 8 实现递归 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33879299/

相关文章:

java - 帮助反射+构造函数

java - Spring Boot 添加 Http 请求拦截器

c++ - 使用模板元编程的位交换功能

Python 数组加法递归

lambda - 避免由于冗余转换而导致 lambda 表达式中出现代码分析 CA1800 错误

JAVA:如何将 JsonObject 更新为另一个 JsonObject

java - 使用动态键序列化 JSON 响应

linux - 在 Linux CLI 中以相对于当前目录的路径递归列出文件

Java 8 流映射,将 null 保留为 null

python - Pandas lambda 多个参数返回