我只想递归地定义一个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 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)