1. 程式人生 > >java8-lambda表達式

java8-lambda表達式

一行代碼 為我 抽象方法 int 回調 substr pre ont println

lambda表達式,允許函數將另一個函數作為參數傳入。

第一次聽到lambda表達式,我想到的是原來js的回調函數寫法,當然現在js的回調好像用得已經不多,es6之後大家更多采用的是Promise的寫法。接下來看看lambda表達式具體怎麽寫。

/**
 * 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中
 */
public class Lambda {

    public static void main(String[] args) {
        log("10 + 5 = " + curOperate(10, 5, addition));
        log(
"10 - 5 = " + curOperate(10, 5, subtraction)); log("10 x 5 = " + curOperate(10, 5, multiplication)); log("10 / 5 = " + curOperate(10, 5, division)); } private static void log(String s) { System.out.println(s); } interface MathOperation { int operation(int
a, int b); } /** * 入參不用類型聲明 */ static MathOperation subtraction = (a, b) -> a - b; /** * 入參用類型聲明 */ static MathOperation addition = (int a, int b) -> a + b; /** * 返回值放到大括號裏面 */ static MathOperation multiplication = (int a, int
b) -> { return a * b; }; /** * 返回值不放到大括號,直接返回 */ static MathOperation division = (int a, int b) -> a / b; private static int curOperate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }

先講一下MathOperate這個接口。我們看到MathOperation有一個方法:operate。其入參是兩個int類型的參數,返回值也是int類型。那麽我們再當前類裏面給出了operation的4個實現。這4個實現的寫法也是不同於java8之前接口的寫法。之前我們可能會寫一個繼承接口的類,然後對方法進行實現。類似於下圖

public interface MathOperation {
    int operation(int a, int b);
}

但是java8中,接口裏面只有一個抽象方法的時候可以直接使用lambda映射到該方法。所以我們可以直接用一行代碼寫出一個實現。addition,substraction,multiplication,division是MathOperation的4個實現。

最後的curOperation為我們展示了接口的調用,結果就不展示了。Lambda應該說是一個語法糖,簡化了部分代碼量。

java8-lambda表達式