lambda與方法引用

Lambda表達(dá)式:簡(jiǎn)潔地表示可傳遞的匿名函數(shù)的一種方式睡互。

lambda用于何處:在函數(shù)式接口上使用Lambda表達(dá)式 。

函數(shù)式接口:只定義了一個(gè)抽象方法的接口為函數(shù)式接口(哪怕有很多默認(rèn)方法)瞻坝。

函數(shù)式編程:讓方法作為值。

lambda

labmda格式

(Apple a,Apple b)->b.getWeight().compareTo(a.getWeight())
//箭頭前面括號(hào)內(nèi)的為labmda參數(shù)
//箭頭后面的為labmda主體

下列僅有 4、5不是lambda表達(dá)式

(1) () -> {}
// 這個(gè)Lambda沒有參數(shù),并返回void铅匹。它類似于主體為空的方法:public void run() {}

(2) () -> "Raoul"
//  這個(gè)Lambda沒有參數(shù),并返回String作為表達(dá)式饺藤。

(3) () -> {return "Mario";}
// 這個(gè)Lambda沒有參數(shù)伊群,并返回String(利用顯式返回語(yǔ)句)。 

(4) (Integer i) -> return "Alan" + i;
// return是一個(gè)控制流語(yǔ)句策精。要使此Lambda有效,需要使花括號(hào)崇棠,如下所示: (Integer i) -> {return "Alan" + i;}咽袜。 

(5) (String s) -> {"IronMan";}
// “Iron Man”是一個(gè)表達(dá)式,不是一個(gè)語(yǔ)句枕稀。要使此Lambda有效询刹,你可以去除花括號(hào) 和分號(hào)谜嫉,如下所示:(String s) -> "Iron Man"“剂或者如果你喜歡沐兰,可以使用顯式返回語(yǔ) 句,如下所示:(String s)->{return "IronMan";}蔽挠。 

方法引用規(guī)則

常見方法引用有如下三種:

lambda寫法 方法引用方式 備注
(args) -> ClassName.staticMethod(args) ClassName::staticMethod 其中staticMethod為靜態(tài)方法
(arg0, rest) -> arg0.instanceMethod(rest) ClassName::instanceMethod 其中ClassName是arg0的類型
(args) -> expr.instanceMethod(args) expr::instanceMethod expr是實(shí)例化后的對(duì)象

Lambda與方法引用實(shí)踐

針對(duì)下面的Apple集合,現(xiàn)有需求根據(jù)重量排序。實(shí)現(xiàn)推導(dǎo)Lambda與方法引用椅棺。

List<Apple> apples = Arrays.asList(new Apple().setColor("red").setWeight(100),
                new Apple().setColor("yellow").setWeight(180),
                new Apple().setColor("black").setWeight(140));
  1. 匿名類

    apples.sort(new Comparator<Apple>() {
            public int compare(Apple a1, Apple a2){
                return a1.getWeight().compareTo(a2.getWeight());
            }
    });
    
  2. lambda表達(dá)式簡(jiǎn)化

    // 1.簡(jiǎn)化
    apples.sort((Apple a,Apple b)->b.getWeight().compareTo(a.getWeight()));
    // 2.使用Comparator接口的comparing方法
    apples.sort(Comparator.comparing((Apple a)->a.getWeight()));
    
  3. 使用方法引用

    apples.sort(Comparator.comparing(Apple::getWeight));
    

復(fù)合lambda表達(dá)式

比較器復(fù)合

//  原有基礎(chǔ)上逆序
apples.sort(Comparator.comparing(Apple::getWeight).reversed());
//  原有基礎(chǔ)上逆序,一樣重時(shí) 再按顏色排序
apples.sort(Comparator.comparing(Apple::getWeight).reversed()
       .thenComparing(Apple::getColor));

謂詞復(fù)合

Predicate<Apple> predicate = (Apple a)->a.getWeight()>100;
Predicate<Apple> predicate2 = (Apple a)->a.getColor().equals("yellow");
// 非
Predicate<Apple> notRedApple = predicate.negate();
// 與
Predicate<Apple> andPredicate = notRedApple.and(predicate2);

apples.stream().filter(notRedApple);
apples.stream().filter(andPredicate);

函數(shù)復(fù)合

Function<Integer, Integer> f = x -> x + 1;
Function<Integer, Integer> g = x -> x * 2;
Function<Integer, Integer> h = f.andThen(g);
int result = h.apply(1); 
// 結(jié)果返回4
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仲义,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠巡,更是在濱河造成了極大的恐慌量窘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氢拥,死亡現(xiàn)場(chǎng)離奇詭異蚌铜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嫩海,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門冬殃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人出革,你說(shuō)我怎么就攤上這事造壮。” “怎么了骂束?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵耳璧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我展箱,道長(zhǎng)旨枯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任混驰,我火速辦了婚禮攀隔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栖榨。我一直安慰自己昆汹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布婴栽。 她就那樣靜靜地躺著满粗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愚争。 梳的紋絲不亂的頭發(fā)上映皆,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天挤聘,我揣著相機(jī)與錄音,去河邊找鬼捅彻。 笑死组去,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的步淹。 我是一名探鬼主播从隆,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贤旷!你這毒婦竟也來(lái)了广料?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幼驶,失蹤者是張志新(化名)和其女友劉穎艾杏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盅藻,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡购桑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氏淑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勃蜘。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖假残,靈堂內(nèi)的尸體忽然破棺而出缭贡,到底是詐尸還是另有隱情,我是刑警寧澤辉懒,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布阳惹,位于F島的核電站,受9級(jí)特大地震影響眶俩,放射性物質(zhì)發(fā)生泄漏莹汤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一颠印、第九天 我趴在偏房一處隱蔽的房頂上張望纲岭。 院中可真熱鬧,春花似錦线罕、人聲如沸止潮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沽翔。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仅偎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工雳殊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留橘沥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓夯秃,卻偏偏與公主長(zhǎng)得像座咆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仓洼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 概念 Lambda 表達(dá)式可以理解為簡(jiǎn)潔地表示可傳遞的匿名函數(shù)的一種方式:它沒有名稱介陶,但它有參數(shù)列表、函數(shù)主...
    劉滌生閱讀 3,194評(píng)論 5 18
  • 第一章 為什么要關(guān)心Java 8 使用Stream庫(kù)來(lái)選擇最佳低級(jí)執(zhí)行機(jī)制可以避免使用Synchronized(同...
    謝隨安閱讀 1,486評(píng)論 0 4
  • 本文內(nèi)容大部分來(lái)自《Java 8實(shí)戰(zhàn)》一書 前言 在上一篇文章中色建,我們了解了利用行為參數(shù)化來(lái)傳遞代碼有助于應(yīng)對(duì)不斷...
    我沒有三顆心臟閱讀 5,059評(píng)論 0 3
  • Lambda表達(dá)式 利用行為參數(shù)化這個(gè)概念哺呜,就可以編寫更為靈活且可重復(fù)使用的代碼。但同時(shí)箕戳,使用匿名類來(lái)表示不同的行...
    謝隨安閱讀 867評(píng)論 2 0
  • 參考文章地址 前言 在上一篇文章中某残,我們了解了利用行為參數(shù)化來(lái)傳遞代碼有助于應(yīng)對(duì)不斷變化的需求,它允許你定義一個(gè)代...
    流年劃破容顏_cc55閱讀 255評(píng)論 0 0