小编Tho*_*ont的帖子

Java 8中的递归lambda表达式

我只想递归地定义一个Java 8 lambda表达式.

LAMBDA FAQ提到一个只能在(静态)字段初始化定义递归lambda表达式.

但我在IntelliJ中遇到编译器错误(javac只报告没有消息的错误):

java:初始化程序中的自引用

如果我尝试写类似的东西:

static UnaryOperator<Integer> f = i -> i == 0 ? 1 : i * f.apply( i - 1);
Run Code Online (Sandbox Code Playgroud)

要么

UnaryOperator<Integer> f = i -> i == 0 ? 1 : i * f.apply( i - 1);
Run Code Online (Sandbox Code Playgroud)

我发现使其工作的一种方法是使用数组来引用lambda有效地欺骗java编译器:

import java.util.function.UnaryOperator;

public class RecursiveLambdaExample {

    public static void main(String[] args) {

        UnaryOperator<Integer>[] fac = new UnaryOperator[1];
        fac[0] = i -> i == 0 ? 1 : i * fac[0].apply( i - 1); …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

11
推荐指数
1
解决办法
4877
查看次数

使用lambda表达式和Streams将端口Erlang置换函数转换为Java 8

是否可以仅使用Java 8 lambda表达式和Java 8流编写以下Erlang代码?这来自List Comprehensions 3.3 Permutations

perms([]) -> [[]];
perms(L)  -> [[H|T] || H <- L, T <- perms(L--[H])].
Run Code Online (Sandbox Code Playgroud)

java erlang java-8

5
推荐指数
1
解决办法
1863
查看次数

标签 统计

java ×2

java-8 ×2

erlang ×1

lambda ×1