Lambda 表達(dá)式 in Java 8

  • Lambda表達(dá)式是java 8 新增的特性
  • Lambda表達(dá)式主要作用:支持將代碼塊作為方法參數(shù),允許使用更簡(jiǎn)潔的代碼創(chuàng)建函數(shù)式接口的實(shí)例筝野,是匿名內(nèi)部類(lèi)的一種簡(jiǎn)化,可以部分取代匿名內(nèi)部類(lèi)的作用。
  • 函數(shù)式接口:只有一個(gè)抽象方法的接口皂冰。
  • Lambda表達(dá)式又稱(chēng)為匿名函數(shù)(anonymous function),表示一類(lèi)無(wú)需定義標(biāo)識(shí)符(函數(shù)名)的函數(shù)或者子程序养篓,可以看做是一種語(yǔ)法糖秃流。

Lambda 表達(dá)式語(yǔ)法格式

Lambda表達(dá)式在java中由三部分組成:

  • 形參列表:形參列表允許省略形參類(lèi)型,如果形參列表只有一個(gè)參數(shù)柳弄,形參列表外的圓括號(hào)也可以省略
  • 箭頭->:箭頭不可省略
  • 代碼塊:如果代碼塊只有一條語(yǔ)句舶胀,允許省略代碼塊的花括號(hào);更有甚者,只有一條return語(yǔ)句峻贮,可以省略return關(guān)鍵字席怪。
interface Eatable{
    void taste();
}

interface Flyable{
    void fly(String weathrer);
}

interface Addable{
    int add(int a,int b);
}

public class LambdaTest {
    public void eat(Eatable e) {
        e.taste();
        System.out.println(e);
    }
    public void fly(Flyable f) {
        f.fly("好天氣");
        System.out.println(f);
    }
    public void add(Addable a) {
        System.out.println(a.add(5, 3));
    }
    
    public static void main(String[] args) {
        LambdaTest test = new LambdaTest();
        test.eat(()->System.out.println("蘋(píng)果"));
        test.fly(weater->{
            System.out.println("哈哈哈");
            System.out.println("可以飛行");
        });
        // 省略形參類(lèi)型 省略花括號(hào)
        test.add((a,b)->a+b);
    }
}

函數(shù)式接口

  • 函數(shù)式接口是指只包含一個(gè)抽象方法的接口,(可有其他默認(rèn)方法(default修飾)或者類(lèi)方法)java 8 中有大量的函數(shù)式接口如最常見(jiàn)的:Runnable纤控,ActionListener挂捻,并提供了@FunctionInterface注解,告訴編譯器執(zhí)行更嚴(yán)格的檢查船万。
Runnbale r =()->{
    for(int i =0;i<100;i++){
        System.out.println(i);
    }
}; // 注意分號(hào)

  • Lamdba 表達(dá)式的目標(biāo)類(lèi)型只能是函數(shù)式接口刻撒。
  • Lambda 表達(dá)式常應(yīng)用場(chǎng)景:
    1. 將Lambda表達(dá)式賦值給函數(shù)式接口類(lèi)型的變量
    2. 作為函數(shù)接口類(lèi)型的參數(shù)傳給某個(gè)方法
    3. 使用函數(shù)式接口對(duì)Lambda表達(dá)式進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換
Object obj = (Runnable)()->{
    System.out.println(...);
};

方法引用和構(gòu)造器引用

  • 應(yīng)用場(chǎng)景:代碼塊只有一條語(yǔ)句,并且該語(yǔ)句為調(diào)用方法或者構(gòu)造器
  • 應(yīng)用目的:使Lambda表達(dá)式的語(yǔ)法更為簡(jiǎn)潔
  • 應(yīng)用方式:::
@FunctionalInterface
interface Converter{
    Integer convert(String from);
}

// 類(lèi)方法
Converter con = from->Integer.valueOf(from);
Converter con1 = Integer::valueOf;

// 對(duì)象方法
Converter con2 = from->"hhhh".indexOf(from);
Converter con3 = "hhhh"::indexOf;

// 構(gòu)造器類(lèi)似
// ::new

Lambda表達(dá)式與匿名內(nèi)部類(lèi)的聯(lián)系和區(qū)別

  • Lambda表達(dá)式簡(jiǎn)化了部分匿名內(nèi)部類(lèi)的寫(xiě)法(函數(shù)式接口)耿导,表現(xiàn)性質(zhì)和匿名內(nèi)部類(lèi)一致声怔,可以訪問(wèn)effective final局部變量,和外部類(lèi)成員變量
  • 匿名內(nèi)部類(lèi)的應(yīng)用范圍更廣舱呻,它可以為任何接口創(chuàng)建實(shí)例醋火,也可以服務(wù)于抽象類(lèi)和普通類(lèi)
  • 注意Lambda表達(dá)式的代碼塊不允許調(diào)用接口中定義的默認(rèn)方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箱吕,隨后出現(xiàn)的幾起案子芥驳,更是在濱河造成了極大的恐慌,老刑警劉巖茬高,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兆旬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡怎栽,警方通過(guò)查閱死者的電腦和手機(jī)丽猬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熏瞄,“玉大人脚祟,你說(shuō)我怎么就攤上這事“涂蹋” “怎么了愚铡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胡陪。 經(jīng)常有香客問(wèn)我沥寥,道長(zhǎng),這世上最難降的妖魔是什么柠座? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任邑雅,我火速辦了婚禮,結(jié)果婚禮上妈经,老公的妹妹穿的比我還像新娘淮野。我一直安慰自己捧书,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布骤星。 她就那樣靜靜地躺著经瓷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洞难。 梳的紋絲不亂的頭發(fā)上舆吮,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音队贱,去河邊找鬼色冀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柱嫌,可吹牛的內(nèi)容都是我干的锋恬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼编丘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼与学!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起嘉抓,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤癣防,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掌眠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幕屹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蓝丙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片望拖。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渺尘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出说敏,到底是詐尸還是另有隱情鸥跟,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布盔沫,位于F島的核電站医咨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏架诞。R本人自食惡果不足惜拟淮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谴忧。 院中可真熱鬧很泊,春花似錦角虫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至昏兆,卻和暖如春枫虏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亮垫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工模软, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饮潦。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓燃异,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親继蜡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子回俐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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