Lambda表達式

這裏是修真院後端小課堂,每篇分享文從html

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】java

八個方面深度解析後端知識/技能,本篇分享的是:git

程序員

Lambda表達式。github

編程

https://url.cn/544DLQl?sf=uri後端

 

https://it-xzy.github.io/JAVA...函數

 

 

你們好,我是IT修真院鄭州分院第11期的學員何爽,一枚正直純潔善良的後端程序員,今天給你們分享一下,修真院官網java(職業)任務10,深度思考中的知識點——Lambda表達式。編碼

 

 

1.背景介紹url

 

 

1、簡介

(注:雖然看着很先進,其實Lambda表達式的本質只是一個"語法糖",由編譯器推斷並幫你轉換包裝爲常規的代碼,所以你可使用更少的代碼來實現一樣的功能。

建議不要亂用,由於這就和某些很高級的黑客寫的代碼同樣,簡潔,難懂,難以調試,維護人員想罵娘.)

Lambda表達式是Java SE 8中一個重要的新特性。lambda表達式容許你經過表達式來代替功能接口。 lambda表達式就和方法同樣,它提供了一個正常的參數列表和一個使用這些參數的主體(body,能夠是一個表達式或一個代碼塊)。

Lambda表達式還加強了集合庫。 Java SE 8添加了2個對集合數據進行批量操做的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了許多額外的功能。 

總的來講,lambda表達式和 stream 是自Java語言添加泛型(Generics)和註解(annotation)以來最大的變化。

Lambda其實就是匿名方法;Java會在背後,悄悄的,把這些都還原成匿名類方式。匿名類--指的是在聲明一個類的同時實例化它,使代碼更加簡潔精練。

匿名類?

匿名類指的是在聲明一個類的同時實例化它,使代碼更加簡潔精練一般狀況下,要使用一個接口或者抽象類,都必須建立一個子類有的時候,爲了快速使用,直接實例化一個抽象類,

並「當場」實現其抽象方法。既然實現了抽象方法,那麼就是一個新的類,只是這個類,沒有命名。這樣的類,叫作匿名類。

 

2.知識剖析

 

lambda運算符:

 

全部的lambda表達式都是用新的lambda運算符 " -> ",能夠叫他,「轉到」或者 「成爲」。

運算符將表達式分爲兩部分,左邊指定輸入參數,中間是箭頭,右邊是lambda的主體。

(參數類型 參數名)->{代碼主體}

 

1.標準寫法:(類型1 參數名1,類型2 參數名2...)->{代碼塊}

2.參數類型能夠推斷 :(參數名1,參數名2...)->{代碼塊}

3.存在多行代碼 :(參數名1,參數名2...)->{代碼行;--代碼行}

4.單個參數並可推斷類型 :(參數名1)->{代碼塊}

5.方法引用 :System.out::println

6,沒有參數 :()->{代碼塊}

lambda表達式與匿名內部類:

匿名內部類也就是沒有名字的內部類正由於沒有名字,因此匿名內部類只能使用一次,它一般用來簡化代碼編寫

但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口PS:Lambda表達式並不能取代全部的匿名內部類,只能用來取代函數接口(Functional Interface)的簡寫。

 

lambda表達式與函數式接口:

函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,可是能夠有多個非抽象方法的接口。

任何接口,若是隻包含惟一 一個抽象方法,那麼它就是一個Functional Interface。

以前它們被稱爲 SAM類型,即 單抽象方法類型(Single Abstract Method)。

接口中的方法默認就是public abstract的。

函數式接口須要添加:@FunctionalInterface

 

 

3.常見問題 

 

1.若是lambda只能使用一次,那麼它的優點又有什麼呢?

2.咱們爲何須要Lambda表達式呢?

 

4.解決方案

1.

一.lamada表達式簡化了接口實現的過程,使得代碼結構更加簡潔。

二.lamada的使用很是靈活。

2.

lambda表達式經過實現匿名類的方式對接口或者類進行了實例化,可是由於實例化的對象沒有名字,也就沒法進行二次使用,因此lambda表達式只可以使用一次,也就只可以使用或者執行一個方法。

簡單講就是:用lambda表達式構造方法實體,等價於實現了接口中的方法,最終lambda表達式的返回值就是接口的實現類。

 

 

5.編碼實戰

 

 

6.擴展思考

lambda的優勢:

與匿名類 概念相比較,Lambda其實就是匿名方法,這是一種把方法做爲參數進行傳遞的編程思想。代碼很簡潔。

lambda有缺點嗎?

  1. 可讀性差,與囉嗦的可是清晰的匿名類代碼結構比較起來,Lambda表達式一旦變得比較長,就難以理解。
  2. 不便於調試,很難在Lambda表達式中增長調試信息,好比日誌。
  3. 版本支持,Lambda表達式在JDK8版本中才開始支持,若是系統使用的是之前的版本,考慮系統的穩定性等緣由,而不肯意升級,那麼就沒法使用。

 

 

7.參考文獻

 

 

https://www.jianshu.com/p/4e8...

 

https://blog.csdn.net/KOKjock...

 

https://www.cnblogs.com/frans...

 

 

8.更多討論

 

 

 

Q1:提問人wyq:

 

lambda還有什麼缺點嗎?

 

 

 

A1:回答人(h):

 

lambda表達式的可讀性比較差,所以致使其後期的維護工做很是難作。

 

Q2:提問人:zhh

 

Lambda表達式有什麼做用?

 

 

A2:回答人(h):

 

最直觀的做用就是使得代碼變得異常簡潔。

 

Q3:提問人:zyq

 

哪裏可使用Lambda表達式?

 

A3:回答人(h):

 

你能夠在函數式表達式接口上使用Lambda表達式。

 

 

9.鳴謝

 

 

此教程是自我查找資料的基礎上完善而成。

 

 

10.結束語

 

 

 

今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚~

相關文章
相關標籤/搜索