Lambda表達式使用教程

Lambda表達式使用教程

一套才、Lambda表達式的本質

Lambda表達式的本質就是函數式接口的實例吞滞,即一個接口只聲明了一個抽象方法漠趁,則此接口就稱為函數式接口扁凛。

二、特點

  • 只包含一個抽象方法的接口闯传,稱為函數式接口谨朝。
  • 你可以通過Lambda表達式來創(chuàng)建該接口的對象。( 若Lambda表達式拋出一個受檢異常(即:非運行時異常)甥绿,那么該異常需要在目標接口的抽象方法上進行聲明)字币。
  • 我們可以在一個接口上使用@Functionallnterface注解,這樣做可以檢查它是否是一個函數式接口共缕。同時javadoc也會包含一條聲明洗出, 說明這個接口是一個函數式接口。
  • 在java.util.function包下定義了Java 8的豐富的函數式接口
@FunctionalInterface
public interface MyInterface {
    int method1(String a);
}

三图谷、格式

  • -> :Lambda操作符或箭頭操作符
  • -> 左邊:Lambda形參列表 (其實就是接口中的抽象方法的形參列表)
  • -> 右邊:Lambda體(其實就是重寫的抽象方法的方法體)

四翩活、使用總結

  • -> 左邊:Lambda形參列表的參數類型可以省略(類型推斷);如果Lambda形參列表只有一個參數便贵,其一對 () 也可以省明菠镇。
  • -> 右邊:Lambda體應該使用一對 {} 包裹;如果Lambda體只有一條執(zhí)行語句(可能是return語句)承璃,可以省略這一對 {} 和 return 關鍵字利耍。

五、使用介紹(六種情況)

1. 無參無返回值

@Test
public void test1(){
    //未使用Lambda表達式的寫法
    Runnable r1 = new.Runnable() {
        @Override
        public void run() {
            System.out.println("我愛北京天安門");
        }
    };
    r1.run();
        
    System.out.println("************************");
    
    //使用了Lambda表達式之后
    Runnable r2 = () -> {
        System.out.println( "我愛北京故宮");
    };
    r2.run();
}

2. 有參無返回值

@Test
public void test2(){
    //未使用Lambda表達式的寫法
    Consumer<String> con = new Consumer<String>(){
            @Override
        public void accept(String s){
            System.out.print1n(s);
        }
    };
    con.accept("謊言和誓言的區(qū)別是什么?");
    
    System.out.println(****************);
    
    //使用了Lambda表達式之后
    Consumer<String> con1 = (String s) -> {
        System.out.println(s);
    };
    con1.accept("一個是聽得人當真了盔粹,一個是說的人當真了");
}

3. 類型推斷

//語法格式三:數據類型可以省略隘梨,因為可由編譯器推斷得出,稱為“類型推斷”
@Test
public void test3(){
    //數據類型沒有省略
    Consumer<String> con1 = (String s) -> {
        System.out.println(s);
    };
    con1.accept("一個是聽得人當真了玻佩,一個是說的人當真了");
                
    System.out.println("****************");
    
    //數據類型省略之后
    Consumer<String> con2 = (s) -> {
        System.out.println(s);
    };
    con2.accept( t: "一個是聽得人當真了,一個是說的人當真了");
}

4. 單參單語句

//語法格式四: Lambda 若只需要一個參數時席楚,參數的小括號可以省略
@Test
public void test5(){
    //只需要一個參數咬崔,但是不忽略小括號
    Consumer<String> con1 = (s) -> {
        System.out.println(s);
    };
    con1.accept("一個是聽得人當真了,任一個是說的人當真了");
    
    System.out.println("****************");
                       
    //只需要一個參數烦秩,可以忽略小括號     
    Consumer<string> con2 = s -> {
        System.out.println(s);
    };
    con2.accept("一個是聽得人當真了垮斯,一個是說的人當真了");
}

5. 多參多語句帶返回值

//語法格式五: Lambda 需要兩個或以上的參數,多條執(zhí)行語句只祠,并且可以有返回值
@Test
public void test6(){
    
    Comparator<Integer> com1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
    }
    System.out.println(com1.compare(12,21));

    System.out.println("************************");
        
    Comparator<Integer> com2 = (o1,o2) -> {
        System.out.println(o1);
        System.out.println(o2);
        return o1.compareTo(o2);
    };
    System.out.println(com2.compare(12,21));
}

6. 多參單語句帶返回值

//語法格式六:Lambda體只有一條語句時兜蠕,return與大括號若有,都可以省略
@Test
public void test7(){
    //未省略大括號與return
    Comparator<Integer> com1 = (o1,o2) -> {
        return o1.compareTo(o2);
    };
    System.out.println(com1.compare(12,6));
    
    System.out.println("************************");
    //省略了大括號和return
    Comparator<Integer> com2 = (01,02) -> o1.compareTo(o2);
    System.out.println(com2.compare(12,6));
}

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末抛寝,一起剝皮案震驚了整個濱河市熊杨,隨后出現的幾起案子曙旭,更是在濱河造成了極大的恐慌,老刑警劉巖晶府,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桂躏,死亡現場離奇詭異,居然都是意外死亡川陆,警方通過查閱死者的電腦和手機剂习,發(fā)現死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來较沪,“玉大人鳞绕,你說我怎么就攤上這事∈” “怎么了们何?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骡苞。 經常有香客問我垂蜗,道長,這世上最難降的妖魔是什么解幽? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任贴见,我火速辦了婚禮,結果婚禮上躲株,老公的妹妹穿的比我還像新娘片部。我一直安慰自己,他們只是感情好霜定,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布档悠。 她就那樣靜靜地躺著,像睡著了一般望浩。 火紅的嫁衣襯著肌膚如雪辖所。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天磨德,我揣著相機與錄音缘回,去河邊找鬼。 笑死典挑,一個胖子當著我的面吹牛酥宴,可吹牛的內容都是我干的。 我是一名探鬼主播您觉,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拙寡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琳水?” 一聲冷哼從身側響起肆糕,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤般堆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后擎宝,有當地人在樹林里發(fā)現了一具尸體郁妈,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年绍申,在試婚紗的時候發(fā)現自己被綠了噩咪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡极阅,死狀恐怖胃碾,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情筋搏,我是刑警寧澤仆百,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站奔脐,受9級特大地震影響俄周,放射性物質發(fā)生泄漏。R本人自食惡果不足惜髓迎,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一峦朗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧排龄,春花似錦波势、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至争舞,卻和暖如春凛忿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竞川。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工店溢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人流译。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓逞怨,卻偏偏與公主長得像者疤,于是被迫代替她去往敵國和親福澡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容