在函数接口声明中,如何将另一个函数接口作为参数传递?

In Function Interface declaration, how to pass another Function Interface as argument?

我想做这样的事情-

final Function<Function<Integer, Integer>, Integer> function = (//appropriate syntax)

可以吗?如果是,正确的语法是什么?

当然可以,下面是一个实现的例子

int input = 2;
Function<Integer, Integer> times10Function = i -> i * 10;
Function<Function<Integer, Integer>, Integer> minus10Function = func -> func.apply(input) - 10;

Integer result = minus10Function.apply(times10Function);
System.out.println(result); // 10

你不能做的事实 (i -> i + 10) -> ... 与你不能在方法签名中使用常量的原因相同,这些是占位符,而不是实际实现,因此它们由调用者引导

Yassin Hajaj 发布的答案非常完美。但是,为了更清楚地理解,我想出了一个更好的例子 -

        final int base1 = 3;
        final int base2 = 5;
        final int index = 2;

        final Function<BiFunction<Integer, Integer, Integer >, Function<Integer, Integer>> power = func ->
                myIndex -> {
            int result = 1;
            int base = func.apply(base1, base2);
            for (int i = 1; i <= myIndex; i++) {
                result *= base;
            }
            return result;
        };

        final BiFunction<Integer, Integer, Integer> addition = (num1, num2) -> num1 + num2;

        final int result = power.apply(addition).apply(index);

        System.out.println("Result: " + result);

输出-

Result: 64

这里有两个函数

addition 函数的作用是定义两个数字的加法。

power函数以addition函数为参数,执行base1base2的加法得到base。作为第二个参数,power 采用 index,然后对幂指数和 returns 结果执行基数的幂运算。