Hun*_*Dev 2 java lambda java-8
我有一个interface操作如下:
interface Operation {
public double calc(double a, double b);
}
Run Code Online (Sandbox Code Playgroud)
我用它来做enum.
public enum Operations {
POWER("^", new Operation(){
public double calc(double a, double b) {
return Math.pow(a, b);
}
}),
MULTIPLICATION("*", new Operation(){
public double calc(double a, double b) {
return a * b;
}
}),
//...
private String op;
private Operation calc;
public Operations(String op, Operation calc) {
this.op = op;
this.calc = calc;
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用lambda表达式缩短我的代码,但我似乎无法正确使用语法.oracle教程对我来说有点太复杂了.有人可以用简单的方式向我解释一下吗?
编辑:我试过:
POWER ("^", (double a, double b) -> Math.pow(a,b)), 等等,但它没有编译.
固定:
import java.util.function.*;
public enum Operations {
POWER("^", Math::pow),
MULTIPLICATION("*", (double a,double b)->a*b),
private final String op;
private final DoubleBinaryOperator calc;
Operations(String op, DoubleBinaryOperator calc) {
this.op = op;
this.calc = calc;
}
DoubleBinaryOperator getCalc() {
return calc;
}
}
Run Code Online (Sandbox Code Playgroud)
Operation 作为一个功能界面,表达式:
new Operation(){
public double calc(double a, double b) {
return Math.pow(a, b);
}
}
Run Code Online (Sandbox Code Playgroud)
可以用以下lambda表达式替换:
(a, b) -> Math.pow(a, b)
Run Code Online (Sandbox Code Playgroud)
或方法参考:
Math::pow
Run Code Online (Sandbox Code Playgroud)
有了这个,你的enum意志将成为:
public enum Operations {
POWER("^", Math::pow),
MULTIPLICATION("*", (a, b) -> a * b);
private String op;
private Operation calc;
public Operations(String op, Operation calc) {
this.op = op;
this.calc = calc;
}
}
Run Code Online (Sandbox Code Playgroud)