【Java】 以后遇到lambda別再一頭問號啦

pexels-photo-775201.jpeg

Lambda表達式

為什么會有Lambda表達式

要說Lambda表達式,就一定要先說一下匿名類了攻旦,像使用Thread時,要創(chuàng)建一個Runnable接口的實現(xiàn)類放入Thread的構造方法中,一般情況下都是采用內部類的形式來創(chuàng)建的

例如

Thread thread1=new Thread(new Runnable(){
@Override
    public void run(){
        c=1;
        a=d;
    }
});

這不是很亂嘛,于是就誕生了lambda表達式丈莺,lambda表達式的出現(xiàn)讓面向接口的編程更加的方便了

上面的代碼使用了lambda表達式就可以變成這樣子了

代碼

Thread thread1=new Thread(()->{
    c=1;
    a=d;});

這樣的代碼不是很優(yōu)美很簡介了嘛

如何使用lambda表達式

lambda的基本語法

lambda的主要構成就是一個()(參數(shù))和一個->(箭頭,所以也叫做箭頭函數(shù))送丰,還有{}(方法體)

無論有沒有參數(shù)缔俄,都要加上一個()

箭頭也是不用想了的,必須要加

方法體呢蚪战,就看情況,如果只有一行代碼铐懊,可以不加邀桑;如果超過了一行代碼,則必須要加

lambda的使用條件

lambda必須使用在所實現(xiàn)的接口只有一個方法(函數(shù)式接口)的條件下科乎,只有在只有一個方法的條件下壁畸,就能自動識別返回類型、參數(shù)茅茂、方法名捏萍。至于是什么階段進行處理的我也不是很清楚,我看.class文件中還沒有對lambda表達式進行解析空闲。

lambda的基本使用

代碼


/**
 * lambda測試
 * @author Administrator
 */
public class LambdaTest {
    public static void main(String[] args) {
        int i=10;
//2.實現(xiàn)接口
        MyInterface myInterface=(a,b)->{
                return (int)a+(int)b;
        };
//3.使用接口
        System.out.println(myInterface.method(2,9));
    }
//1.先創(chuàng)建一個接口
    public interface MyInterface{
        Object method(Object a,Object b);
    }
}

stream和lambda的結合

只有在特殊情況下令杈,我們才會考慮到使用lambda表達式,畢竟沒有那么多只有一個方法的接口碴倾。

lambda表達式最經(jīng)常的使用就是和stream結合來使用逗噩,stream是一種聲明式處理數(shù)據(jù)的方法掉丽,就是說,對于一個或一組數(shù)據(jù)异雁,能夠先定義處理方法捶障,然后在按照這個方法來處理每個數(shù)據(jù),最常見的就是forEach循環(huán)

這里列舉一些常見的stream:

forEach

map

filter

limit

不同的stream各有不用纲刀,這里就不過多地做探討了项炼,但是需要注意一點,stream不會改變原來的數(shù)據(jù)

這里想使用forEach示绊,還需要使用ArrayList锭部,所以要先轉成ArrayList才能使用

代碼

public static void main(String[] args) {    
        int[] i={1,2,3,4,5,7,8,9};
        List list=new ArrayList();
        for (int a:i) {
            list.add(a);
        }
      list.forEach((num)->System.out.println((int)num+10););
    }
結果
11
12
13
14
15
17
18
19

方法引用

方法引用的出現(xiàn)的原因

方法引用出現(xiàn)的原因跟lambda一樣,都是為了讓編程更加地方便耻台,但是它的功能卻和lambda不一樣空免,方法引用是在lambda的基礎上,讓代碼更加緊湊

如何使用方法引用

方法引用的使用方式就是::盆耽,但是需要注意的是蹋砚,方法引用引用的是已經(jīng)存在的方法,如果是要實現(xiàn)接口方法的話摄杂,還是需要使用lambda表達式
方法引用的分類

在這里插入圖片描述

總共有四種坝咐,但是只要區(qū)分構造方法引用和其他方法引用就可以了,其他方法都是大同小異的

代碼
public static void main(String[] args) {
    int[] i={1,2,3,4,5,7,8,9};
    List list=new ArrayList();
    for (int a:i) {
        list.add(a);
    }

//方法引用
    list.forEach(Test::prin);
    list.forEach((num)->System.out.println((int)num+10));
}
/**
 * 1.先定義靜態(tài)類析恢、靜態(tài)方法
 */
public static class Test{
    public static void prin(Object num){
        System.out.println((int)num+10);
    }
}

結果都是一樣的

需要注意的點:

方法名稱要一致(new除外)

參數(shù)個數(shù)墨坚、類型要一致

總結

lambda表達式和方法引用都是簡化了代碼,它們都有一個特點映挂,就是會延續(xù)原來方法或者接口的參數(shù)泽篮、返回值類型,把這些重復的代碼省去了柑船。只有在使用已經(jīng)定義好的方法時帽撑,才會用上方法引用。

——————————————————————————————
你知道的越多鞍时,不知道的越多亏拉。

如果本文章內容有問題,請直接評論或者私信我逆巍。如果覺得寫的還不錯的話及塘,點個贊也是對我的支持哦

未經(jīng)允許,不得轉載锐极!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末笙僚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子灵再,更是在濱河造成了極大的恐慌味咳,老刑警劉巖庇勃,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異槽驶,居然都是意外死亡责嚷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門掂铐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罕拂,“玉大人,你說我怎么就攤上這事全陨”啵” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵辱姨,是天一觀的道長柿菩。 經(jīng)常有香客問我,道長雨涛,這世上最難降的妖魔是什么枢舶? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮替久,結果婚禮上凉泄,老公的妹妹穿的比我還像新娘。我一直安慰自己蚯根,他們只是感情好后众,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颅拦,像睡著了一般蒂誉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上距帅,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天右锨,我揣著相機與錄音,去河邊找鬼锥债。 笑死陡蝇,一個胖子當著我的面吹牛痊臭,可吹牛的內容都是我干的哮肚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼广匙,長吁一口氣:“原來是場噩夢啊……” “哼允趟!你這毒婦竟也來了?” 一聲冷哼從身側響起鸦致,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤潮剪,失蹤者是張志新(化名)和其女友劉穎涣楷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抗碰,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡狮斗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弧蝇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碳褒。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖看疗,靈堂內的尸體忽然破棺而出沙峻,到底是詐尸還是另有隱情,我是刑警寧澤两芳,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布摔寨,位于F島的核電站,受9級特大地震影響怖辆,放射性物質發(fā)生泄漏是复。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一疗隶、第九天 我趴在偏房一處隱蔽的房頂上張望佑笋。 院中可真熱鬧,春花似錦斑鼻、人聲如沸蒋纬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜀备。三九已至,卻和暖如春荒叶,著一層夾襖步出監(jiān)牢的瞬間碾阁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工些楣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脂凶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓愁茁,卻偏偏與公主長得像蚕钦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹅很,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容