與python不一樣,python lambda是定義匿名函數,而在java8中lambda是匿名內部類
例1、用lambda表達式實現Runnable
我開始使用Java 8時,首先做的就是使用lambda表達式替換匿名類,而實現Runnable接口是匿名類的最好示例。看一下Java 8之前的runnable實現方法,需要4行代碼,而使用lambda表達式只需要一行代碼。我們在這里做了什么呢?那就是用() -> {}代碼塊替代了整個匿名類。
1
2
3
4
5
6
7
8
9
10
|
// Java 8之前: new Thread( new Runnable() { @Override public void run() { System.out.println( "Before Java8, too much code for too little to do" ); } }).start(); //Java 8方式: new Thread( () -> System.out.println( "In Java8, Lambda expression rocks !!" ) ).start(); |
輸出:
too much code, for too little to do
Lambda expression rocks !!
這個例子向我們展示了Java 8 lambda表達式的語法。你可以使用lambda寫出如下代碼:
(params) -> expression
(params) -> statement
(params) -> { statements }
例如,如果你的方法不對參數進行修改、重寫,只是在控制臺打印點東西的話,那么可以這樣寫:
() -> System.out.println("Hello Lambda Expressions");
如果你的方法接收兩個參數,那么可以寫成如下這樣:
(int even, int odd) -> even + odd
順便提一句,通常都會把lambda表達式內部變量的名字起得短一些。這樣能使代碼更簡短,放在同一行。所以,在上述代碼中,變量名選用a、b或者x、y會比even、odd要好。
例2、使用Java 8 lambda表達式進行事件處理
如果你用過Swing API編程,你就會記得怎樣寫事件監聽代碼。這又是一個舊版本簡單匿名類的經典用例,但現在可以不這樣了。你可以用lambda表達式寫出更好的事件監聽代碼,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// Java 8之前: JButton show = new JButton( "Show" ); show.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println( "Event handling without lambda expression is boring" ); } }); // Java 8方式: show.addActionListener((e) -> { System.out.println( "Light, Camera, Action !! Lambda expressions Rocks" ); }); |
Java開發者經常使用匿名類的另一個地方是為 Collections.sort() 定制 Comparator。在Java 8中,你可以用更可讀的lambda表達式換掉丑陋的匿名類。我把這個留做練習,應該不難,可以按照我在使用lambda表達式實現 Runnable 和 ActionListener 的過程中的套路來做。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/linwenbin/p/12172396.html