歡迎光臨
每天分享高質量文章

一個簡單案例,5 分鐘看懂 Java Lamdba 運算式

JDK8引入了一個新玩意,叫做lamdba(那麼大)的運算式,說得神乎其神,說真的,這玩意吧,並不難,但是要講清楚吧,也不是太容易的事情。


從匿名內部類開始說起


老實交代,直接來講lamdba運算式還真是個枯燥的玩意,那從哪下手呢,我想你一定使用過匿名內部類吧,這玩意在javaswing裡面用的超級多。


比如監聽一個按鈕的單擊事件:

       JButton jButton = new JButton();
       jButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e{
               System.out.println("按鈕被點選了");
           }
       });

這段程式碼應該不陌生吧,addActionListener的這方法需要一個ActionListener介面型別的引數,我這裡傳參就是透過匿名內部類的方式。


你可能會說,swing是什麼古董,java開發早不玩這玩意了,嗯,我不好反駁(畢竟連eclipse都是swing\awt開發的)。


好吧,我再舉另外一個慄子,執行緒怎麼樣,執行緒如果還不懂,我就要……

建立執行緒有很多種方式,那麼我從裡面選一直比較簡單的

比如:

       new Thread(new Runnable() {
           public void run({
               System.out.println("這是個執行緒,我是匿名內部類");
           }
       }).start();


好吧,你仔細看下上面兩個實體程式碼,並且……


並且數一數上面程式碼的行數,我姑且算它5行不過分吧。


話鋒一轉,來看下Lamdba的定義


定義:Lambda是一個匿名函式,即沒有函式名的函式(簡化了匿名委託的使用,讓你讓程式碼更加簡潔)


請不要去百度這句話出自哪,我有點羞於承認這是我自己總結的,嗯,有一點成就感,同時也有點害羞。


你來看下這句話的意思,Lambda是一個匿名函式,即沒有函式名的函式,這句話是不是非常眼熟,這不就是匿名內部類嗎?


嗯,其實括號裡面的才是重點【簡化了匿名委託的使用,讓你讓程式碼更加簡潔】


匿名委託又是什麼鬼?


其實我賣了個關子,匿名委託就是匿名內部類


用直白的話來講,lamdba運算式就是簡化了匿名內部類的編寫,這樣解釋應該好懂吧(不懂你把我殺了吧)


萬一不懂,嗯,萬一還是不懂請留言吧。


Lamdba(那麼大)的運算式到底是什麼簡化程式碼?


謎題好像要解開了,知道了匿名委託是什麼,也知道了Lamdba運算式的定義,那麼回到剛才寫的那兩個匿名內部類。


第一個

       JButton jButton = new JButton();
       jButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e{
               System.out.println("按鈕被點選了");
           }
       });

使用lamdba把上面的簡化下:

       JButton jButton = new JButton();
       jButton.addActionListener(e -> System.out.println("按鈕被點選了"));

再來看第二個,執行緒的那個內部類

       new Thread(new Runnable() {
           public void run({
               System.out.println("這是個執行緒,我是匿名內部類");
           }
       }).start();

再使用lamdba簡化一下

new Thread(()-> System.out.println("這是個執行緒,我是匿名內部類")).start();

好吧,還是那個要求,請你數數,看下使用lamdba運算式到底簡化了多少行程式碼。


嗯,我想現在你一定對lamdba有了一定的理解,知道他確實是簡化了程式碼的編寫。


仔細看下這lamdba,感覺還是不太好理解,裡面既然冒出了個“->”的符號,現在似乎應該來講講lamdba的語法了。。


但,請容我休息一下,具體的lamdba語法留下一次分享。


如果你想成為一名優秀的java架構師,想學習Java高階技術基礎、框架技術的原始碼級分析、linux、SpringBoot、SpringCloud、阿裡微服務框架Dubbo、Docker構建微服務或者在工作中遇到瓶頸,想跳槽加薪,面試不過,碰到難題等等一系列問題,可以加小助理姐姐:iiiinoo,這裡有最專業的人為你排憂解難,有最新的學習資源免費為你共享。

掃碼免費領取資料,僅限前 300 名


贊(0)

分享創造快樂