Java8 lambda表達(dá)式2種常用方法代碼解析
與python不一樣,python lambda是定義匿名函數(shù),而在java8中l(wèi)ambda是匿名內(nèi)部類
例1、用lambda表達(dá)式實現(xiàn)Runnable
我開始使用Java 8時,首先做的就是使用lambda表達(dá)式替換匿名類,而實現(xiàn)Runnable接口是匿名類的最好示例??匆幌翵ava 8之前的runnable實現(xiàn)方法,需要4行代碼,而使用lambda表達(dá)式只需要一行代碼。我們在這里做了什么呢?那就是用() -> {}代碼塊替代了整個匿名類。
// 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表達(dá)式的語法。你可以使用lambda寫出如下代碼:
(params) -> expression
(params) -> statement
(params) -> { statements }
例如,如果你的方法不對參數(shù)進(jìn)行修改、重寫,只是在控制臺打印點東西的話,那么可以這樣寫:
() -> System.out.println("Hello Lambda Expressions");
如果你的方法接收兩個參數(shù),那么可以寫成如下這樣:
(int even, int odd) -> even + odd
順便提一句,通常都會把lambda表達(dá)式內(nèi)部變量的名字起得短一些。這樣能使代碼更簡短,放在同一行。所以,在上述代碼中,變量名選用a、b或者x、y會比even、odd要好。
例2、使用Java 8 lambda表達(dá)式進(jìn)行事件處理
如果你用過Swing API編程,你就會記得怎樣寫事件監(jiān)聽代碼。這又是一個舊版本簡單匿名類的經(jīng)典用例,但現(xiàn)在可以不這樣了。你可以用lambda表達(dá)式寫出更好的事件監(jiān)聽代碼,如下所示:
// 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開發(fā)者經(jīng)常使用匿名類的另一個地方是為 Collections.sort() 定制 Comparator。在Java 8中,你可以用更可讀的lambda表達(dá)式換掉丑陋的匿名類。我把這個留做練習(xí),應(yīng)該不難,可以按照我在使用lambda表達(dá)式實現(xiàn) Runnable 和 ActionListener 的過程中的套路來做。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Java開發(fā)實現(xiàn)OAuth安全認(rèn)證的應(yīng)用
這篇文章主要介紹了使用Java開發(fā)實現(xiàn)OAuth安全認(rèn)證的應(yīng)用的方法,OAuth安全認(rèn)證經(jīng)常出現(xiàn)于社交網(wǎng)絡(luò)API應(yīng)用的相關(guān)開發(fā)中,需要的朋友可以參考下2015-11-11Java Swing GroupLayout分組布局的實現(xiàn)代碼
這篇文章主要介紹了Java Swing GroupLayout分組布局的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12使用Apache Ignite實現(xiàn)Java數(shù)據(jù)網(wǎng)格
今天我們來探討如何使用Apache Ignite來實現(xiàn)Java數(shù)據(jù)網(wǎng)格,Apache Ignite是一個高性能的內(nèi)存計算平臺,它提供了分布式緩存、數(shù)據(jù)網(wǎng)格和計算功能,可以顯著提高大規(guī)模應(yīng)用的數(shù)據(jù)處理性能,感興趣的小伙伴跟著小編一起來看看吧2024-08-08Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁和事務(wù)管理
這篇文章主要介紹了Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁和事務(wù)管理的相關(guān)資料,需要的朋友可以參考下2016-01-01