Lambda表達(dá)式

讀書筆記,資料來自Java8 實戰(zhàn)

我覺的它是匿名內(nèi)部類的優(yōu)化,省略了匿名內(nèi)部類許多不必要的代碼。而更簡潔的表達(dá)匿名內(nèi)部類的參數(shù)所要實現(xiàn)的功能。它基本上就是沒有聲明名稱的方法,但和匿名類一樣,它也可以作為參 數(shù)傳遞給一個方法(傳遞參數(shù)的行為)

一、使用場景

在函數(shù)式接口上使用Lambda表達(dá)式

二、語法特點

1.簡潔:無需像匿名內(nèi)部類那樣寫許多模板代碼
2.傳遞:可以作為參數(shù)傳遞
3.語法:它不是一種特定的函數(shù),只是一種特定的寫法和條件所組成的函數(shù)。

三、語法結(jié)構(gòu)

參數(shù)列表:原來匿名內(nèi)部類中的參數(shù)
箭頭:指向參數(shù)要做的事情
主體:接口方法中具體的實現(xiàn),因為Lambda表達(dá)式只能作用在函數(shù)式接口上,主體對應(yīng)的就是接口方法具體的功能

image.png

image.png

四、使用Lambda表達(dá)式步驟

1.定義函數(shù)式的接口實現(xiàn)功能,即將方法的部分行為使用接口的形式參數(shù)化
2.將方法的參數(shù)設(shè)定位定義好的接口
3.使用Lambda表達(dá)式為接口方法傳遞具體的功能實現(xiàn)

Lambda和內(nèi)部類的對比
1.使用內(nèi)部類的方式傳遞實現(xiàn),無疑功能會被寫死
2.而使用Lambda表示的方式傳遞實現(xiàn),可以動態(tài)的為process(String name)方法傳遞它的實現(xiàn)。
對比語法結(jié)構(gòu):(name)表示需要傳遞實現(xiàn)的方法的參數(shù)列表,箭頭指向,該方法具體的實現(xiàn)。

image.png

五、使用Java8提供函數(shù)描述符

1.接口抽象方法的名字,可以表述Lambda表達(dá)式主體所要實現(xiàn)的功能的含義。因此想要表述一些功能就需要定義函數(shù)式接口,Java8提供了幾個函數(shù)式接口,省的我們自己定義接口。

例如OnPorcess接口的process方法的名稱描述了name+“ Hello“ 索要表達(dá)的含義

**1.Predicate Interface **
做條件判斷時可以使用

public interface Predicate<T>{
        boolean test(T t);
 }

2.Consumer Interface
沒有返回值,只需要實現(xiàn)具體的功能時可以使用。

@FunctionalInterface
 public interface Consumer<T>{
        void accept(T t);
}

3.Function Interface
有泛型返回值的方法,將一種輸入類型轉(zhuǎn)換成類一種類型輸出

@FunctionalInterface
    public interface Function<T, R>{
        R apply(T t);
    }

使用上述三個接口

image.png

傳入Lambda表達(dá)式
image.png

**五、如何處理異常
任何Java提供的函數(shù)式接口都不能處理異常,如何想要處理異常需要自己定義函數(shù)式接口,并拋出異常,或者在執(zhí)行方法時try-catch住。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容