42 函數(shù)式接口

函數(shù)式接口在Java中是有且只有一個抽象方法的接口急灭,java中就是使用Lambda接口作為函數(shù)式接口

1

定義接口格式如上涂邀,其中因為方法默認(rèn)public abstract所以是可以省略的(當(dāng)然接口還可以定義其他默認(rèn)方法,靜態(tài)方法剩失,私有方法勘究,但不能定義多余一個抽象方法)

2

如上渗鬼,我們定義2個抽象方法勘畔,則其不是函數(shù)接口所灸,只是普通接口,我們可以通過什么來限制抽象方法數(shù)量呢

3

我們在接口定義前使用@FunctionalInterface炫七,編輯器會自動添加爬立,這樣我們寫2個抽象方法就會標(biāo)紅

4

刪掉一個后,顯示正常万哪。當(dāng)然@是注解寫法(用于限制結(jié)構(gòu))侠驯,我們之前也遇到重寫方法,@Override壤圃,必須是準(zhǔn)確重寫才不會報錯

Lambda的延遲執(zhí)行

有些場景代碼執(zhí)行后陵霉,其結(jié)果不一定馬上被使用,造成性能浪費伍绳,而lambda表達(dá)式是延遲執(zhí)行,可以提升性能

5

比如我們定義個log輸出日志函數(shù)乍桂,如果等級是1冲杀,我們就輸出信息效床,我們給log的等級傳入1,二參數(shù)穿入口拼接字符串权谁,當(dāng)然輸出信息剩檀,但是如果傳入其他level值,還是會計算拼接的內(nèi)容旺芽,這顯然沒有必要沪猴,這里就需要使用lambda表達(dá)式的延時功能,使用lambda表達(dá)式采章,則必須有函數(shù)式接口

6

接口定義如上运嗜,返回拼接字符串,

7

函數(shù)式接口作為參數(shù)

定義函數(shù)悯舟,傳入接口担租,使用時使用lambda表達(dá)式作為接口參數(shù)

8

之前多線程里也用過lambda表達(dá)式,這里再鞏固下抵怎,我們知道Runnable可以作為Thread構(gòu)造方法的參數(shù)奋救,而且是函數(shù)式接口,可以重寫run方法反惕,我們于是可以如上2種方法啟動尝艘,1是重寫了,2是因為其符合函數(shù)接口姿染,我們直接使用lambda表達(dá)式

9

當(dāng)然Lambda方法體只有一行時背亥,{}和分號可以省略

函數(shù)式接口作為返回值

java.util.comparator接口也是函數(shù)式接口,其compare方法盔粹,可以用于排序隘梨,

10

使用匿名內(nèi)部類返回Comparator接口,然后實現(xiàn)排序

11

而使用Lambda表達(dá)式就可以優(yōu)化很多舷嗡,因為數(shù)據(jù)類型可以省略還有括號分號等

常用函數(shù)式接口

jdk常用的函數(shù)式接口在Java.util.function包中轴猎,里面都是函數(shù)式接口,而且只有一個抽象方法进萄,我們只挑幾個比較重要的接口來講

Supplier接口

Supplier<T>接口指定泛型捻脖,里面有個T get()方法,參數(shù)無參中鼠,返回的就是這個泛型可婶,這個接口被稱為生產(chǎn)型接口,我們給其指定其什么泛型援雇,其就輸出什么類型

12

如上矛渴,我們定義函數(shù)參數(shù)為接口,然后使用lambda表達(dá)式重寫接口,效果如上具温,我們給設(shè)置字符串泛型蚕涤,那就返回字符串

Consumer接口

13

Consumer接口也要指定泛型,抽象方法accept參數(shù)為泛型铣猩,返回值無

14

如上揖铜,判斷個年齡是否達(dá)到18歲來確認(rèn)成年與否,順帶使用了下三元操作符

Consumer接口還有默認(rèn)方法andThen达皿,用于實現(xiàn)多個消費處理

15

源碼和介紹如上天吓,其默認(rèn)方法接收Comsumer接口對象,返回的是Consumer接口峦椰,

16

如上注解龄寞,我們2個接口都對字符串s進(jìn)行消費,顯然可以分著寫们何,當(dāng)然可以使用andThen實現(xiàn)2個消費萄焦,效果一樣,注意冤竹,先調(diào)用的先消費

17

我們先寫一個2個接口的分別accept

18

如上拂封,使用andThen,效果一樣

Predicate接口

19

抽象方法boolean test(T t)用于判斷

20

還是判斷是否成年鹦蠕,如上即可

Predicate接口還有3個默認(rèn)方法冒签,與或非

and方法

21

其介紹如上,源碼可以看出是默認(rèn)為短路與钟病,and傳入另一個Predicate或高級接口萧恕,返回2這test的結(jié)果

22

or方法

23

本質(zhì)是短路或,將返回Predicate接口

negate方法

是取反

24
25

沒什么可說的肠阱,或和非的代碼如上


Function接口

26

此接口是用于類型轉(zhuǎn)換加工的接口票唆,抽象方法apply,參數(shù)傳入T類型屹徘,返回R類型走趋,接口的泛型需要同時指定T,R

27

默認(rèn)方法andThen

28

默認(rèn)方法同樣是實現(xiàn)多個接口的轉(zhuǎn)換,并將結(jié)果返回對應(yīng)處理噪伊,如上簿煌,我們對數(shù)字字符串->int且+3,然后再將其轉(zhuǎn)換為字符串

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鉴吹,一起剝皮案震驚了整個濱河市姨伟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豆励,老刑警劉巖夺荒,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡般堆,警方通過查閱死者的電腦和手機(jī)在孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門诚啃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淮摔,“玉大人,你說我怎么就攤上這事始赎『统龋” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵造垛,是天一觀的道長魔招。 經(jīng)常有香客問我,道長五辽,這世上最難降的妖魔是什么办斑? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮杆逗,結(jié)果婚禮上乡翅,老公的妹妹穿的比我還像新娘。我一直安慰自己罪郊,他們只是感情好蠕蚜,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悔橄,像睡著了一般靶累。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上癣疟,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天挣柬,我揣著相機(jī)與錄音,去河邊找鬼睛挚。 笑死邪蛔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竞川。 我是一名探鬼主播店溢,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼委乌!你這毒婦竟也來了床牧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤遭贸,失蹤者是張志新(化名)和其女友劉穎戈咳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡著蛙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年删铃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踏堡。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡猎唁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顷蟆,到底是詐尸還是另有隱情诫隅,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布帐偎,位于F島的核電站逐纬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏削樊。R本人自食惡果不足惜豁生,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漫贞。 院中可真熱鬧甸箱,春花似錦、人聲如沸绕辖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仪际。三九已至围小,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間树碱,已是汗流浹背肯适。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留成榜,地道東北人框舔。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像赎婚,于是被迫代替她去往敵國和親刘绣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354