bra*_*orm 4 lambda java-8 functional-interface
这是我试过的.它甚至没有编译.
public class LambdaExample {
public static Integer handleOperation(Integer x, Integer y, Function converter){
return converter.apply(x,y);
}
public static void main(String[] args){
handleOperation(10,10, Operation::add);
}
}
class Operation {
public int add(Integer x, Integer y){
return x+y;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在这里努力实现的一些事情是:
1)如何传递lambda expression
方法参数(在main
上面的方法中)
2)如何将参数传递给函数(在 handleOpertion
方法中,存在compilation
应用的错误只需要一个参数)
A Function
接受输入x并产生结果y.因此,在执行操作时,您不是在寻找Function
(不提及您使用的是原始类型)return converter.apply(x,y);
,而是为了BiFunction<Integer, Integer, Integer>
更简单,BinaryOperator<Integer>
因为每个类型参数都是相同的.
1)如何将lambda表达式作为方法参数传递(在上面的main方法中)
通过提供一个尊重BinaryOperator<Integer>
接口契约的lambda表达式,即一个将两个Integer
作为参数并返回一个的方法Integer
.
handleOperation(10,10, (a, b) -> a + b)
Run Code Online (Sandbox Code Playgroud)
2)如何将参数传递给函数(在handleOpertion方法中,存在应用的编译错误只需要一个参数)
因为函数具有形式,f => u
因此apply方法采用单个参数并产生单个结果,如数学函数,如f(x) = 2 * x
(参考答案的第一部分).
这是我试过的.它甚至没有编译.
要编译代码,可以在使用方法引用之前使方法静态或创建新实例.然后它会add
在handleOperation
调用函数的apply方法时引用新实例的方法.
handleOperation(10,10, new Operation()::add);
Run Code Online (Sandbox Code Playgroud)
请注意,此方法已存在于JDK中,它是Integer::sum
.它需要两个原始的int值而不是Integer
引用,但它足够接近,因此自动装箱机制将使此方法BinaryOperator<Integer>
在方法上下文中显示为有效.
归档时间: |
|
查看次数: |
4294 次 |
最近记录: |