Java lambda寫法簡單實現

       衆所周知,java8支持lambda表達式,常見的一些操做均可以經過lambda來實現,好比遍歷List,或者是實現某個事件接口,還有咱們熟悉的Swing的事件,以下案例所示:java

// Java 8以前:
JButton b1=  new JButton("BeforeJava8");
b.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("Button push");
    }
});

// Java 8方式:
JButton b2=  new JButton("Java8");
b2.addActionListener((e) -> {
    System.out.println("Button push");
});

       有時候咱們比較迷惑:Java明明是OOP語言,Lambda表達式豈不是破壞了OOP的封裝特性?實則否則,Lambda實際上是用接口實現的,而這個接口只有一個方法。咱們看下面的案例:編程

/**
 * @author wangwenhai
 */
interface PrintHandler {
    void print(int[] array);
}


public class Main {
    static void print(int[] array, PrintHandler printHandler) {
        printHandler.print(array);
    }

    public static void main(String[] args) {
        int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        print(array, new PrintHandler() {
            @Override
            public void print(int[] array) {
                for (int i = 0; i < array.length; i++) {
                    System.out.println("數組:" + i);
                }
            }
        });
    }
}

這是一個簡單的遍歷數組的寫法,經過傳一個接口進去,而後用戶去實現具體的遍歷方法,上面看上去是一個很普通的匿名接口實現,可是若是咱們用了Java8之後,這段代碼會變得更加精簡:數組

/**
 * @author wangwenhai
 */
interface PrintHandler {
    void print(int[] array);
}


public class Main {
    private static void print(int[] array, PrintHandler printHandler) {
        printHandler.print(array);
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        print(array, array1 -> {
            for (int i = 0; i < array1.length; i++) {
                System.out.println("數組:" + i);
            }
        });
    }
}

      你們也許已經注意到了,此處的匿名接口實現不見了,彷彿出現了一段從沒見過的代碼,其實這就是Java8的lambda的實現:ide

print(array, array1 -> {
            for (int i = 0; i < array1.length; i++) {
                System.out.println("數組:" + i);
            }
        });

        其中array1是傳給接口的參數,在這裏直接省略了接口的實現過程,由於就一個方法,因此這個參數直接被傳進print方法裏面。函數式編程

        咱們用個圖來表示從OOP到FP(函數式編程)的過程。函數

相關文章
相關標籤/搜索