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