一个简单案例,5 分钟看懂 Java Lamdba 表达式
JDK8引入了一個(gè)新玩意,叫做lamdba(那么大)的表達(dá)式,說得神乎其神,說真的,這玩意吧,并不難,但是要講清楚吧,也不是太容易的事情。
?
從匿名內(nèi)部類開始說起
老實(shí)交代,直接來講lamdba表達(dá)式還真是個(gè)枯燥的玩意,那從哪下手呢,我想你一定使用過匿名內(nèi)部類吧,這玩意在javaswing里面用的超級多。
比如監(jiān)聽一個(gè)按鈕的單擊事件:
? ? ? ?JButton jButton =?new?JButton();jButton.addActionListener(new?ActionListener() {public?void?actionPerformed(ActionEvent e)?{System.out.println("按鈕被點(diǎn)擊了");}});?
這段代碼應(yīng)該不陌生吧,addActionListener的這方法需要一個(gè)ActionListener接口類型的參數(shù),我這里傳參就是通過匿名內(nèi)部類的方式。
你可能會說,swing是什么古董,java開發(fā)早不玩這玩意了,嗯,我不好反駁(畢竟連eclipse都是swing\awt開發(fā)的)。
好吧,我再舉另外一個(gè)栗子,線程怎么樣,線程如果還不懂,我就要……
創(chuàng)建線程有很多種方式,那么我從里面選一直比較簡單的
比如:
? ? ? ?new?Thread(new?Runnable() {public?void?run()?{System.out.println("這是個(gè)線程,我是匿名內(nèi)部類");}}).start();?
好吧,你仔細(xì)看下上面兩個(gè)實(shí)例代碼,并且……
并且數(shù)一數(shù)上面代碼的行數(shù),我姑且算它5行不過分吧。
?
話鋒一轉(zhuǎn),來看下Lamdba的定義
定義:Lambda是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù)(簡化了匿名委托的使用,讓你讓代碼更加簡潔)
請不要去百度這句話出自哪,我有點(diǎn)羞于承認(rèn)這是我自己總結(jié)的,嗯,有一點(diǎn)成就感,同時(shí)也有點(diǎn)害羞。
你來看下這句話的意思,Lambda是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù),這句話是不是非常眼熟,這不就是匿名內(nèi)部類嗎?
嗯,其實(shí)括號里面的才是重點(diǎn)【簡化了匿名委托的使用,讓你讓代碼更加簡潔】
匿名委托又是什么鬼?
其實(shí)我賣了個(gè)關(guān)子,匿名委托就是匿名內(nèi)部類。
用直白的話來講,lamdba表達(dá)式就是簡化了匿名內(nèi)部類的編寫,這樣解釋應(yīng)該好懂吧(不懂你把我殺了吧)
萬一不懂,嗯,萬一還是不懂請留言吧。
Lamdba(那么大)的表達(dá)式到底是什么簡化代碼?
謎題好像要解開了,知道了匿名委托是什么,也知道了Lamdba表達(dá)式的定義,那么回到剛才寫的那兩個(gè)匿名內(nèi)部類。
第一個(gè)
? ? ? ?JButton jButton =?new?JButton();jButton.addActionListener(new?ActionListener() {public?void?actionPerformed(ActionEvent e)?{System.out.println("按鈕被點(diǎn)擊了");}});?
使用lamdba把上面的簡化下:
? ? ? ?JButton jButton =?new?JButton();jButton.addActionListener(e -> System.out.println("按鈕被點(diǎn)擊了"));?
再來看第二個(gè),線程的那個(gè)內(nèi)部類
? ? ? ?new?Thread(new?Runnable() {public?void?run()?{System.out.println("這是個(gè)線程,我是匿名內(nèi)部類");}}).start();?
再使用lamdba簡化一下
new?Thread(()->?System.out.println("這是個(gè)線程,我是匿名內(nèi)部類")).start();?
好吧,還是那個(gè)要求,請你數(shù)數(shù),看下使用lamdba表達(dá)式到底簡化了多少行代碼。
嗯,我想現(xiàn)在你一定對lamdba有了一定的理解,知道他確實(shí)是簡化了代碼的編寫。
仔細(xì)看下這lamdba,感覺還是不太好理解,里面既然冒出了個(gè)“->”的符號,現(xiàn)在似乎應(yīng)該來講講lamdba的語法了。。
但,請容我休息一下,具體的lamdba語法留下一次分享。
總結(jié)
以上是生活随笔為你收集整理的一个简单案例,5 分钟看懂 Java Lamdba 表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java泛型限制
- 下一篇: Java 函数式编程和 lambda 表