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(函数式编程)的过程。函数

相关文章
相关标签/搜索