如何解决在函数接口声明中,如何传递另一个函数接口作为参数?
我想做这样的事情 -
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> 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
,然后执行 base 到幂索引的幂运算并返回结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。