Java 8 lambda表达式的问题

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)

Roh*_*ain 9

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)

  • `(a,b) - > Math.pow(a,b)`或`Math :: pow`,不是那些的组合 (2认同)