Lambda Quick Start筆記
背景
匿名內(nèi)部類
在java中先口,如果某些功能實(shí)現(xiàn)只在程序中使用一次,那么一般就用匿名內(nèi)部類來(lái)實(shí)現(xiàn)。例如在android中view的事件綁定。
而且匿名內(nèi)部類會(huì)引用其外部類的對(duì)象,這樣就容易造成內(nèi)存泄露沼填。
另外,匿名內(nèi)部類看起來(lái)很繁雜括授,不優(yōu)雅坞笙。
但是在java中,使用方法接口(functional interfaces)匿名內(nèi)部類是一種通行的模式荚虚。如Runnable Comparator也是這種方式⊙σ梗現(xiàn)在這些都可以用lambda表達(dá)式來(lái)替換實(shí)現(xiàn)。
Lambda Expression Syntax
Argument List | Arrow Tocken | Body |
---|---|---|
(int x,inty) | -> | x + y |
常用使用場(chǎng)景
- 變量聲明
- 賦值
- 返回語(yǔ)句
- 數(shù)組初始化
- 方法或構(gòu)造函數(shù)參數(shù)
- lambda表達(dá)式體
- 條件判斷
- 轉(zhuǎn)型語(yǔ)句
用lambda表達(dá)式改善代碼
lambda表達(dá)式對(duì)“Don't Repeat Yourself”原則提供了更好的支持曲管,使得我們的代碼更簡(jiǎn)潔却邓,可讀性更高
一個(gè)常見的條件過(guò)濾用例
一個(gè)常見的用例就是從一個(gè)集合中找出符合某特定條件的子集。
下面這個(gè)例子我們需要在美國(guó)分出三個(gè)組的人:
- Drivers 年齡大于16歲
- Draftee 18-25歲的男性
- pilots 23-65
代碼
https://github.com/nanhuaqq/LambdaLearn
java.util.function包介紹
Predicate不是java8提供的唯一功能接口院水,除了它還有如下功能接口
- Predicate 攜帶一個(gè)屬性 并把自己作為參數(shù) 傳遞給調(diào)用者腊徙。
- Consumer 執(zhí)行一個(gè)行為 并把自己作為參數(shù) 傳遞給調(diào)用者。
- Function 轉(zhuǎn)型行為 檬某,把T轉(zhuǎn)變成U
- Supplier 提供實(shí)例 類似工廠
- UnaryOperator 一元操作 T -> T
- BinaryOperator 二元操作 (T,T)->T