在函数接口声明中,如何将另一个函数接口作为参数传递?
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
函数为参数,执行base1
和base2
的加法得到base
。作为第二个参数,power
采用 index
,然后对幂指数和 returns 结果执行基数的幂运算。
我想做这样的事情-
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
函数为参数,执行base1
和base2
的加法得到base
。作为第二个参数,power
采用 index
,然后对幂指数和 returns 结果执行基数的幂运算。