Java8-Lambda表達式

什么是Lambda表達式

Lambda可以理解為是一個匿名函數(shù)腾仅,Lambda表達式可以說是一段可以傳遞的代碼√桌可以寫出更簡潔推励、更靈活的代碼。作為一種更緊湊的代碼風格肉迫,使Java的語言表達能力得到了提升验辞。

在Java8以前,我們是通過接口來傳遞代碼的(面向接口的編程)昂拂。
比如:

 Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("run----");
            }
        };

 Thread th = new Thread(runnable);

這里Thread類需要的其實并不是Runnable對象受神,而是它的方法

public abstract void run();

但是沒有辦法直接傳遞方法,只能通過接口來傳遞格侯。

Java8提供了一種新的緊湊的傳遞代碼的語法--就是Lambda表達式鼻听。比如剛才的Thread可以用lambda表達式修改為:

Runnable runnable = (() -> System.out.println("run----"));
Thread th = new Thread(runnable);
//還可以繼續(xù)簡化
Thread t = new Thread(() -> System.out.println("run----"));

是不是簡潔多了?联四。

1.Lambda表達式語法

Lambda 表達式在Java 語言中引入了一個新的語法元素和操作符撑碴。這個操作符為 -> , 該操作符被稱為 Lambda 操作符或剪頭操作符朝墩。它將 Lambda 分為兩個部分:

左側(cè): 指定了 Lambda 表達式所需要的所有參數(shù)
右側(cè):指定了 Lambda 體醉拓,即 Lambda 表達式要執(zhí)行的功能即需傳遞的方法的實現(xiàn)。

語法格式:

1). 無參,無返回值,Lambda體只需一條語句

Runnable runnable = (() -> System.out.println("run----"));

2). Lambda需要一個參數(shù)

Consumer<String> consumer = ((str) -> System.out.println(str));
//只有一個參數(shù)時收苏,參數(shù)小括號可以省略亿卤,如下
Consumer<String> consumer = (str -> System.out.println(str));

3). Lambda 需要兩個參數(shù),并且有返回值

Comparator<Integer> comparator = ((num1, num2) -> {
   return num1 - num2;
});
//當表達式內(nèi)只有一條語句時鹿霸,return和大括號可以省略排吴,如下
Comparator<Integer> comparator = ((num1, num2) -> num1 - num2);

4). 數(shù)據(jù)類型可以省略,因為可由編譯器推斷得出懦鼠,稱為“類型推斷”

BinaryOperator<Long> binaryOperator = ((Long num1, Long num2) -> num1 + num2);
//(Long l1, Long l2) 中參數(shù)類型可以省略钻哩,編譯器可以自動推斷屹堰,如下↓
BinaryOperator<Long> binaryOperator = ((num1, num2) -> num1 + num2);

可以看出,相比匿名內(nèi)部類街氢,傳遞代碼變得更為直觀扯键,不再有實現(xiàn)接口的模板代碼,不再聲明方法珊肃,也名字也沒有荣刑,而是直接給出了方法的實現(xiàn)代碼

2.變量引用

? 與匿名內(nèi)部類類似,Lambda表達式也可以訪問定義在主體代碼外部的變量近范,但對于局部變量嘶摊,它也只能訪問final類型的變量,與匿名內(nèi)部類的區(qū)別是评矩,它不要求變量聲明為final叶堆,但變量事實上不能被重新賦值。比如:

Integer num = 1;
Function<Integer, Integer> function = (integer -> num);

可以訪問局部變量num斥杜,但num不能被重新賦值虱颗,如果這樣寫:

Integer num = 1;
Function<Integer, Integer> function = (integer -> num++);
//編譯器報錯
//Variable used in lambda expression should be final or effectively final

與匿名內(nèi)部內(nèi)比較

從以上內(nèi)容可以看出,Lambda表達式與匿名內(nèi)部類很像蔗喂,主要就是簡化了語法忘渔,使得編寫更加簡單,但Lambda與匿名內(nèi)部類不同的是缰儿,java會為每個匿名內(nèi)部類生成一個一個類畦粮,而Lambda表達式不會。

Lambda表達式不是匿名內(nèi)部類乖阵,那它的類型到底是什么呢宣赔?是函數(shù)式接口

小結(jié)

? 本章介紹了Lambda表達式瞪浸,Lambda語法以及在Lambda表達式中的變量引用儒将。

原文鏈接 : Java8 新特性 Lambda表達式 | 火堯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市对蒲,隨后出現(xiàn)的幾起案子钩蚊,更是在濱河造成了極大的恐慌,老刑警劉巖蹈矮,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砰逻,死亡現(xiàn)場離奇詭異,居然都是意外死亡泛鸟,警方通過查閱死者的電腦和手機诱渤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谈况,“玉大人勺美,你說我怎么就攤上這事”希” “怎么了赡茸?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祝闻。 經(jīng)常有香客問我占卧,道長,這世上最難降的妖魔是什么联喘? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任华蜒,我火速辦了婚禮,結(jié)果婚禮上豁遭,老公的妹妹穿的比我還像新娘叭喜。我一直安慰自己,他們只是感情好蓖谢,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布捂蕴。 她就那樣靜靜地躺著,像睡著了一般闪幽。 火紅的嫁衣襯著肌膚如雪啥辨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天盯腌,我揣著相機與錄音溉知,去河邊找鬼。 笑死腕够,一個胖子當著我的面吹牛级乍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燕少,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卡者,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了客们?” 一聲冷哼從身側(cè)響起崇决,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎底挫,沒想到半個月后恒傻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡建邓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年盈厘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片官边。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡沸手,死狀恐怖外遇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情契吉,我是刑警寧澤跳仿,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站捐晶,受9級特大地震影響菲语,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑灵,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一山上、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧英支,春花似錦佩憾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至把敢,卻和暖如春寄摆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背修赞。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工婶恼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柏副。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓勾邦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親割择。 傳聞我的和親對象是個殘疾皇子眷篇,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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