Java 8 新特性 Lambda 表達(dá)式簡(jiǎn)單使用

Lambda 表達(dá)式主要應(yīng)用在一個(gè)方法需要帶一個(gè)接口類(lèi)型苍凛,而且接口只有一個(gè)抽象方法時(shí)慌申,在創(chuàng)建匿名內(nèi)部類(lèi)時(shí)一些固定的可推導(dǎo)不可變的代碼胶滋,使用一種比較簡(jiǎn)單的語(yǔ)法來(lái)表示璧疗,由編譯器自由推導(dǎo)出來(lái)

語(yǔ)法: 覆蓋方法的參數(shù)列表 -> 表達(dá)式(方法執(zhí)行體)

Lambda 的快速開(kāi)始和分析

在之前,我們做排序的操作如下

@Test
User[] users = { new User("A", 60), new User("A", 70), new User("A", 90) };
// 排序操作姨裸,這里第二參數(shù)是固定的秧倾,compare方法也是固定的,返回值 int 也是固定
Arrays.sort(users, new Comparator<User>() {
     public int compare(User o1, User o2) {
        return Integer.compare(o1.scope, o2.scope);
    }
});

這里用到一個(gè)sort方法,而此方法中需要一個(gè)Comparator 接口類(lèi)型,但是這里new Comparator() 是固定的,需要覆蓋的接口方法compare 也是固定,返回值int也是固定,這些固定的東西實(shí)際上是可以推導(dǎo)出來(lái),所有可以使用lambda表達(dá)式來(lái)簡(jiǎn)化操作.

 User[] users = { new User("A", 60), new User("A", 70), new User("A", 90) };
 Arrays.sort(users, (User o1, User o2) -> {
        return Integer.compare(o1.scope, o2.scope);
 });

刪除固定的”new Comparator()” 和固定要覆蓋的抽象方法”compare”,保留 compare 的參數(shù)列表,中間加 ”->” 后面帶上方法體.至此 lambda 的簡(jiǎn)單使用就 ok 了

實(shí)際上因?yàn)槲覀兣判虻氖?users,而 users 存的就是 User 對(duì)象,所以參數(shù)的 User 類(lèi)型也是可以推導(dǎo)出來(lái)的,而當(dāng)方法體只有一行代碼時(shí)可以省略{},方法的返回值就是方法體也可以省略return.代碼如下

Arrays.sort(users, (o1, o2) -> Integer.compare(o1.scope, o2.scope));

再舉一線程的例子

//原來(lái)的操作
 new Thread(new Runnable() {
  public void run() {
        System.out.println("hello lambda1");
    }
}).start();
//優(yōu)化一
 new Thread(() -> {
        System.out.println("hello lambda1");
    }
}).start();
//優(yōu)化二
 new Thread(() -> System.out.println("hello lambda1");}).start();

Lambda 參數(shù)列表細(xì)節(jié)

Lambda表達(dá)式語(yǔ)法: 參數(shù)列表->表達(dá)式(方法體)

  1. 不帶參數(shù)
    被覆蓋方法沒(méi)有參數(shù)使用 () 來(lái)表示參數(shù)列表,不可省略()
new Thread(() -> System.out.println("hello lambda")).start();
  1. 帶一個(gè)參數(shù)
    • 1)如果參數(shù)寫(xiě)了類(lèi)型,那么參數(shù)外面必須加上()
    • 2)如果參數(shù)不加類(lèi)型,可以省略()
Frame f = new Frame();
    f.setSize(100, 100);
    Button btn = new Button("lambda");
    /*   btn.addActionListener(
(ActionEvent event) -> System.out.println("嘻嘻哈哈")
 );    */
    // 一個(gè)參數(shù)省略了類(lèi)型可以省略()
    btn.addActionListener(event -> System.out.println("嘻嘻哈哈"));
    f.add(btn);
    f.setVisible(true);
  1. 帶多個(gè)參數(shù)
    如果是兩個(gè)以上參數(shù)傀缩,不管有沒(méi)有加類(lèi)型那先,外面必須加上()
String[] names = {"xiaoli1","willie","xiaoming"};
Arrays.sort(names, (n1,n2) -> Integer.compare(n1.length(), n2.length()));

Lambda 表達(dá)式細(xì)節(jié)

Lambda 表達(dá)式表示的是被覆蓋的方法的執(zhí)行體,分以下兩種請(qǐng)求

  1. 方法體只有一行代碼,
    如果方法體只有一行代碼,可以省略{},如果省略了{(lán)}.不管是否需要返回值都不能加return由編譯器自行推導(dǎo)出來(lái).
String[] names = {"willie","will","stef"};
Arrays.sort(names, (n1,n2) -> Integer.compare(n1.length(), n2.length()));
  1. 方法體有多行代碼,需加上{}按正常方法體書(shū)寫(xiě)
String[] names = {"willie","xiaoming","xiaohong"};
Arrays.sort(names, (n1,n2) -> {
    int flag = Integer.compare(n1.length(), n2.length());
          //如果需要返回值,代碼快中必須要有返回值
          if(flag >= 0){
              return 1;
          }
          return -1;
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赡艰,隨后出現(xiàn)的幾起案子售淡,更是在濱河造成了極大的恐慌,老刑警劉巖慷垮,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揖闸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡料身,警方通過(guò)查閱死者的電腦和手機(jī)汤纸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芹血,“玉大人贮泞,你說(shuō)我怎么就攤上這事∷钌” “怎么了隙畜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)说贝。 經(jīng)常有香客問(wèn)我议惰,道長(zhǎng),這世上最難降的妖魔是什么乡恕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任言询,我火速辦了婚禮,結(jié)果婚禮上傲宜,老公的妹妹穿的比我還像新娘运杭。我一直安慰自己,他們只是感情好函卒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布辆憔。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虱咧。 梳的紋絲不亂的頭發(fā)上熊榛,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音腕巡,去河邊找鬼玄坦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绘沉,可吹牛的內(nèi)容都是我干的煎楣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼车伞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼择懂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起帖世,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤休蟹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后日矫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赂弓,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年哪轿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盈魁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窃诉,死狀恐怖杨耙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情飘痛,我是刑警寧澤珊膜,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站宣脉,受9級(jí)特大地震影響车柠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塑猖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一竹祷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羊苟,春花似錦塑陵、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阻桅。三九已至,卻和暖如春兼都,著一層夾襖步出監(jiān)牢的瞬間鳍刷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工俯抖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓦胎。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓芬萍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親搔啊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柬祠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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