最簡單的 Lambda 介紹

如何配置 lambda?
//在 app/build.gradle

android {
    compileSdkVersion 26
    defaultConfig { }
    buildTypes {  }
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}

RxJava 配合 lambda,代碼看起來會簡潔很多,也更加容易看懂,當(dāng)然前提是要會 lambda妹窖,所以本章介紹一下lambda 的基礎(chǔ)用法,其實也很簡單收叶,看幾個例子就可以了骄呼。

lambda的使用前提是某個內(nèi)部類、匿名內(nèi)部類只有一個方法,例如以下幾個類:

interface InnerZeroParamReturnClass {
    Object opr();
}

interface InnerZeroParamClass {
    void opr(); 
}

interface InnerOneParamClass {
    void opr(int a);
}

interface InnerTwoParamClass {
    void opr(int a, int b);
}

我們再添加幾個方法谒麦,參數(shù)分別為上述幾個接口對象

public void opr0(InnerZeroParamClass opr) {}

public void opr01(InnerZeroParamReturnClass opr) {}

public void opr1(InnerOneParamClass opr) {}

public void opr2(InnerTwoParamClass opr) {}
lambda 例子介紹

下面通過舉幾個例子來介紹最基礎(chǔ)的lambda 最基礎(chǔ)的語法俄讹,例子間的順序為逐漸深入,每個例子在前面的例子的基礎(chǔ)上在介紹一個新的特點

  1. 基本語法(v1, v2) -> {}绕德,我們以opr2方法為例子
opr2((a, b) -> {
    int sum = a + b;
    System.out.println(sum);
});
  1. 如果參數(shù)只有一個患膛,則可以省略箭頭左側(cè)的圓弧括號
opr1(a -> {
    int square = a * a;
    System.out.println(square);
});
  1. 如果沒有參數(shù),則需要一對圓弧括號
opr0(() -> {
    String result = "no param";
    System.out.println(result);
});
  1. 如果匿名內(nèi)部類只有一條語句(不一定是一行耻蛇,可以是鏈?zhǔn)?踪蹬,那么可以省略大括號
opr1(v ->
    System.out.println("")
;

//這個例子還屬于第2種語法情況
  1. 如果匿名內(nèi)部類的方法體只有一個語句,且參數(shù)A是相同的臣咖,那么可以用雙冒號寫法跃捣,即去掉(v1, v2) ->以及方法的(param)部分,方法調(diào)用.改成方法引用::夺蛇,如下
opr1(A ->
    System.out.println(A)
;疚漆,
//上面滿足條件1.方法體只有一個語句;2該語句方法的參數(shù)和'->'左側(cè)的參數(shù)是同一個變量
//所以可以變成簡寫成下面這種寫法
opr1(System.out::println); //println 是 out 的靜態(tài)方法刁赦,同樣的如果是調(diào)用成員方法娶聘,格式為 obj::method

  1. 如果匿名內(nèi)部類只有一個返回語句,可以省略 return 關(guān)鍵字
opr01(() -> "Done");

//這個例子還屬于第3, 4種語法情況

以上的六個例子基本涵蓋了lambda的所有語法規(guī)則甚脉,也就是說看懂上面幾個例子后丸升,閱讀和使用 lambda 已經(jīng)不成問題了。本章之所以沒有其它篇幅那么長牺氨,是因為其它長篇幅文章介紹的比較詳細(xì)狡耻,包括新的集合類型的 API 之類的,但是其實新的API使用到的也只是上面的這六種語法猴凹,比如 List 接口的 foreach夷狰,可以用來簡寫遍歷集合的代碼,如下:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        
//for 循環(huán)
for (int num : list) {
    System.out.println(num);
 }

//lambda
list.forEach(System.out::println);

看到上面的的寫法郊霎,很讓人激動人心孵淘,但點擊去一看這個forEach,無非就是接收了一個只有一個方法的接口對象歹篓,然后運用上面第5種 lambda 寫法而已,沒什么神奇的揉阎,所以這些新的相關(guān) API的定義并不屬于 lambda 語法范疇庄撮,也就是說 lambda 語法就是這么簡單,大家完全看一會寫一寫就可以在項目中使用毙籽。

我目前不是做純 Java 開發(fā)洞斯,所以用 AS 來支持像 List 的forEach之類的新 API 會比較麻煩,需要 API 24以上,或者是集成第三方 lambda 支持框架烙如。新API 大多數(shù)情況都可以用相關(guān)操作符替代么抗,代碼量也接近新 API,所以這里就不介紹了亚铁。

所以本章只介紹 lambda 語法蝇刀,不深入其它關(guān)聯(lián)的 API,如果大家對相關(guān)新增的 API 有興趣徘溢,可以看這邊文章哦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吞琐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子然爆,更是在濱河造成了極大的恐慌站粟,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曾雕,死亡現(xiàn)場離奇詭異奴烙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剖张,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門切诀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人修械,你說我怎么就攤上這事趾牧。” “怎么了肯污?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵翘单,是天一觀的道長。 經(jīng)常有香客問我蹦渣,道長哄芜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任柬唯,我火速辦了婚禮认臊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锄奢。我一直安慰自己失晴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布拘央。 她就那樣靜靜地躺著涂屁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灰伟。 梳的紋絲不亂的頭發(fā)上拆又,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼帖族。 笑死栈源,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竖般。 我是一名探鬼主播甚垦,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捻激!你這毒婦竟也來了制轰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤胞谭,失蹤者是張志新(化名)和其女友劉穎垃杖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丈屹,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡调俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旺垒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彩库。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖先蒋,靈堂內(nèi)的尸體忽然破棺而出骇钦,到底是詐尸還是另有隱情,我是刑警寧澤竞漾,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布眯搭,位于F島的核電站,受9級特大地震影響业岁,放射性物質(zhì)發(fā)生泄漏鳞仙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一笔时、第九天 我趴在偏房一處隱蔽的房頂上張望棍好。 院中可真熱鬧,春花似錦允耿、人聲如沸借笙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽提澎。三九已至,卻和暖如春念链,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工掂墓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谦纱,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓君编,卻偏偏與公主長得像跨嘉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吃嘿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

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