Java8 lambda表達(dá)式2種常用方法代碼解析
與python不一樣,python lambda是定義匿名函數(shù),而在java8中l(wèi)ambda是匿名內(nèi)部類(lèi)
例1、用lambda表達(dá)式實(shí)現(xiàn)Runnable
我開(kāi)始使用Java 8時(shí),首先做的就是使用lambda表達(dá)式替換匿名類(lèi),而實(shí)現(xiàn)Runnable接口是匿名類(lèi)的最好示例??匆幌翵ava 8之前的runnable實(shí)現(xiàn)方法,需要4行代碼,而使用lambda表達(dá)式只需要一行代碼。我們?cè)谶@里做了什么呢?那就是用() -> {}代碼塊替代了整個(gè)匿名類(lèi)。
// 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寫(xiě)出如下代碼:
(params) -> expression
(params) -> statement
(params) -> { statements }
例如,如果你的方法不對(duì)參數(shù)進(jìn)行修改、重寫(xiě),只是在控制臺(tái)打印點(diǎn)東西的話,那么可以這樣寫(xiě):
() -> System.out.println("Hello Lambda Expressions");
如果你的方法接收兩個(gè)參數(shù),那么可以寫(xiě)成如下這樣:
(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)行事件處理
如果你用過(guò)Swing API編程,你就會(huì)記得怎樣寫(xiě)事件監(jiān)聽(tīng)代碼。這又是一個(gè)舊版本簡(jiǎn)單匿名類(lèi)的經(jīng)典用例,但現(xiàn)在可以不這樣了。你可以用lambda表達(dá)式寫(xiě)出更好的事件監(jiān)聽(tīng)代碼,如下所示:
// 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開(kāi)發(fā)者經(jīng)常使用匿名類(lèi)的另一個(gè)地方是為 Collections.sort() 定制 Comparator。在Java 8中,你可以用更可讀的lambda表達(dá)式換掉丑陋的匿名類(lèi)。我把這個(gè)留做練習(xí),應(yīng)該不難,可以按照我在使用lambda表達(dá)式實(shí)現(xiàn) Runnable 和 ActionListener 的過(guò)程中的套路來(lái)做。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot設(shè)置接口超時(shí)的方法小結(jié)
這篇文章主要介紹了SpringBoot設(shè)置接口超時(shí)的方法小結(jié),包括配置文件,config配置類(lèi)及相關(guān)示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Java Calendar類(lèi)常用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
從JDK1.1版本開(kāi)始,在處理日期和時(shí)間時(shí),系統(tǒng)推薦使用Calendar類(lèi)進(jìn)行實(shí)現(xiàn)。接下來(lái)通過(guò)實(shí)例代碼給大家詳細(xì)介紹Java Calendar類(lèi)相關(guān)知識(shí),需要的朋友參考下吧2017-04-04
OutOfMemoryError內(nèi)存不足和StackOverflowError堆棧溢出示例詳解
這篇文章主要為大家介紹了OutOfMemoryError內(nèi)存不足和StackOverflowError堆棧溢出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
java跳出多重循環(huán)的三種實(shí)現(xiàn)方式
文章主要介紹了Java中跳出多重循環(huán)的三種方式:使用`break`配合標(biāo)簽、在布爾表達(dá)式中添加判斷變量、以及使用`try-catch`制造異常,每種方式都有具體的代碼示例,并輸出了相應(yīng)的執(zhí)行結(jié)果2025-01-01
基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁(yè)查詢(xún)
這篇文章主要介紹了基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁(yè)查詢(xún),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下2022-07-07
j2ee之AJAX二級(jí)聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了j2ee之AJAX二級(jí)聯(lián)動(dòng)效果的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
淺談為什么重寫(xiě)equals()就要重寫(xiě)hashCode()
困擾我很久的問(wèn)題,一直不明白為什么重寫(xiě)equals()方法的時(shí)候要重寫(xiě)hashCode()方法,這次總算弄明白了,作此分享,感興趣的可以了解一下2021-10-10
spring?boot?使用Mybatis-plus查詢(xún)方法解析
這篇文章主要介紹了spring?boot?使用Mybatis-plus查詢(xún)方法解析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

