讀書筆記,資料來自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)的就是接口方法具體的功能


四、使用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)。

五、使用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);
}
使用上述三個接口

傳入Lambda表達(dá)式

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