成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java8的Lambda 表達(dá)式

teren / 609人閱讀

摘要:的表達(dá)式的一個(gè)大亮點(diǎn)是引入表達(dá)式,使用它設(shè)計(jì)的代碼會(huì)更加簡(jiǎn)潔。表達(dá)式其實(shí)是一個(gè)匿名函數(shù)。匿名方法的寫法定義一個(gè)接口,接口的方法是判斷是否滿足的條件。

Java8的Lambda 表達(dá)式

Java 8的一個(gè)大亮點(diǎn)是引入Lambda表達(dá)式,使用它設(shè)計(jì)的代碼會(huì)更加簡(jiǎn)潔。Lambda 表達(dá)式其實(shí)是一個(gè)匿名函數(shù)。

一、演變過(guò)程

1.普通方法的寫法

定義一個(gè)Hero對(duì)象,存儲(chǔ)英雄的屬性

public class Hero implements Comparable {
    /**
     * 英雄名
     */
    public String name;
    /**
     * 血量
     */
    public float hp;
    /**
     * 傷害
     */
    public int damage.......

篩選出,滿足下面條件的英雄類

private static void filter(List heros) {
    for (Hero hero : heros) {
        if (hero.hp > 100 && hero.damage < 50)
            System.out.print(hero);
    }
}

這種方式,如果篩選條件改變,需要重新再寫一個(gè)方法,稍微麻煩一點(diǎn)。

2.匿名方法的寫法

定義一個(gè)接口,接口的方法是判斷是否滿足的條件。

public interface IHeroChecker {
    /**
     * 判斷Hero是否滿足條件
     * @param h
     * @return
     */
    public boolean checker(Hero h);
}

寫一個(gè)過(guò)濾方法,判斷條件是調(diào)用IHeroChecker對(duì)象的checker方法,其實(shí)就是這個(gè)方法中要使用另一個(gè)類的方法。

private static void filter(List heros,IHeroChecker checker) {
    for (Hero hero : heros) {
        if(checker.checker(hero))
        System.out.print(hero);
    }
}

//匿名類對(duì)實(shí)現(xiàn)此判斷方法
IHeroChecker checker = new IHeroChecker() {
    @Override
    public boolean checker(Hero h) {
        return (h.hp>100 && h.damage<50);
    }
};
filter(heros,checker);

使用匿名類實(shí)現(xiàn)這個(gè)方法,再調(diào)用filter方法

3.Lambda 表達(dá)式的寫法

使用Lambda 表達(dá)式就不用寫匿名類了,將匿名類演變成Lambda表達(dá)式;

1.把匿名類外面的殼子去掉,只保留方法參數(shù)和方法體;

2.參數(shù)和方法體之間加上符號(hào) ->

3.把return和{}去掉

4.只有一個(gè)參數(shù)時(shí)可以去掉();

//匿名類對(duì)實(shí)現(xiàn)此判斷方法
IHeroChecker checker = new IHeroChecker() {
    @Override
    public boolean checker(Hero h) {
        return (h.hp>100 && h.damage<50);
    }
};

 filter(heros,h->h.hp>100 && h.damage<50);

二、與匿名方法關(guān)系

與匿名類概念相比較,Lambda 其實(shí)就是匿名方法,這是一種把方法作為參數(shù)進(jìn)行傳遞的編程思想。java執(zhí)行時(shí),還是會(huì)將他變成匿名類的.

三、Lambda表達(dá)式弊端

1.可讀性差,匿名類代碼結(jié)構(gòu)比較起來(lái),Lambda表達(dá)式一旦變得比較長(zhǎng),不好理解;

2.不便于調(diào)試,很難在Lambda表達(dá)式中增加調(diào)試信息;

3.版本支持,在JDK8以后才有,之前的版本不支持。

四、Lambda表達(dá)式方法的引用

前面我們講了,Lambda表達(dá)式其實(shí)就是一個(gè)方法,把{}和return去掉了而已,那我們?nèi)绻鞋F(xiàn)成的方法,用已有的方法代替它該怎么做

1.引用靜態(tài)方法

已經(jīng)有了靜態(tài)方法

public static boolean checker(Hero h) {
    return h.hp>100 && h.damage<50;
}

在Lambda表達(dá)式中使用

filter(heros, h -> LambdaTest.checker(h) );

直接引用

filter(heros, LambdaTest::checker);

2.引用對(duì)象的方法

引用LambdaTest對(duì)象中testHero方法

LambdaTest lambdaTest = new LambdaTest();
filter(heros, lambdaTest::testHero);

3.引用容器對(duì)象的方法

在Hero對(duì)象中有

private boolean matched(){
    return (hp > 100 && damage < 50);
}

在Lambda表達(dá)式中使用

filter(heros, h -> h.matched());

直接引用

filter(heros, Hero::matched);

五、總結(jié)

可以認(rèn)為L(zhǎng)ambda表達(dá)式可以看做是一個(gè)方法,我們把這個(gè)方法直接可以傳遞到另一個(gè)方法中。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77817.html

相關(guān)文章

  • 轉(zhuǎn) | Java8初體驗(yàn)(一)lambda達(dá)式語(yǔ)法

    摘要:初體驗(yàn)下面進(jìn)入本文的正題表達(dá)式。接下來(lái)展示表達(dá)式和其好基友的配合。吐槽一下方法引用表面上看起來(lái)方法引用和構(gòu)造器引用進(jìn)一步簡(jiǎn)化了表達(dá)式的書(shū)寫,但是個(gè)人覺(jué)得這方面沒(méi)有的下劃線語(yǔ)法更加通用。 感謝同事【天錦】的投稿。投稿請(qǐng)聯(lián)系 [email protected] 本文主要記錄自己學(xué)習(xí)Java8的歷程,方便大家一起探討和自己的備忘。因?yàn)楸救艘彩莿倓傞_(kāi)始學(xué)習(xí)Java8,所以文中肯定有錯(cuò)誤和理解偏...

    Lucky_Boy 評(píng)論0 收藏0
  • Java8-1-初識(shí)Lambda達(dá)式與函數(shù)式接口

    摘要:而在中,表達(dá)式是對(duì)象,它們必須依附于一類特別的對(duì)象類型函數(shù)式接口。即表達(dá)式返回的是函數(shù)式接口類型。 Java8被稱作Java史上變化最大的一個(gè)版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表達(dá)式和Stream API。這兩者也可以結(jié)合在一起使用。首先來(lái)看下什么是Lambda表達(dá)式。Lambda表達(dá)式,維基百科上的解釋是一種用于表示匿名函數(shù)和閉包的運(yùn)算符,感覺(jué)看到這個(gè)解釋...

    jzman 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8新特性-Lambda達(dá)式

    摘要:很多語(yǔ)言等從設(shè)計(jì)之初就支持表達(dá)式。注意此時(shí)外部局部變量將自動(dòng)變?yōu)樽鳛榉椒ǚ祷刂道臃祷嘏袛嘧址欠駷榭张袛嘧址欠駷榭战裉礻P(guān)于新特性表達(dá)式就講到這里了,接下來(lái)我會(huì)繼續(xù)講述新特性之函數(shù)式接口。 上一篇文章我們了解了Java8新特性-接口默認(rèn)方法,接下來(lái)我們聊一聊Java8新特性之Lambda表達(dá)式。 Lambda表達(dá)式(也稱為閉包),它允許我們將函數(shù)當(dāng)成參數(shù)傳遞給某個(gè)方法,或者把代碼...

    gggggggbong 評(píng)論0 收藏0
  • Java8實(shí)戰(zhàn)》-第三章讀書(shū)筆記(Lambda達(dá)式-01)

    摘要:之前,使用匿名類給蘋果排序的代碼是的,這段代碼看上去并不是那么的清晰明了,使用表達(dá)式改進(jìn)后或者是不得不承認(rèn),代碼看起來(lái)跟清晰了。這是由泛型接口內(nèi)部實(shí)現(xiàn)方式造成的。 # Lambda表達(dá)式在《Java8實(shí)戰(zhàn)》中第三章主要講的是Lambda表達(dá)式,在上一章節(jié)的筆記中我們利用了行為參數(shù)化來(lái)因?qū)Σ粩嘧兓男枨?,最后我們也使用到了Lambda,通過(guò)表達(dá)式為我們簡(jiǎn)化了很多代碼從而極大地提高了我們的...

    longshengwang 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8核心特性實(shí)戰(zhàn)之Lambda達(dá)式

    摘要:使用表達(dá)式,使得應(yīng)用變得簡(jiǎn)潔而緊湊。很多語(yǔ)言等從設(shè)計(jì)之初就支持表達(dá)式。表達(dá)式的參數(shù)與函數(shù)式接口內(nèi)方法的參數(shù),返回值類型相互對(duì)應(yīng)。更多教程和資料請(qǐng)上騰訊課堂樂(lè)字節(jié) showImg(https://segmentfault.com/img/bVbtotg?w=935&h=345); Java8 引入Lambda表達(dá)式,允許開(kāi)發(fā)者將函數(shù)當(dāng)成參數(shù)傳遞給某個(gè)方法,或者把代碼本身當(dāng)作數(shù)據(jù)進(jìn)行處理。...

    Karuru 評(píng)論0 收藏0
  • Java8 lambda支持

    摘要:函數(shù)式編程說(shuō)前,先理解下什么是函數(shù)式編程,如果你是個(gè)純程序員,而且之前一直是沒(méi)有使用過(guò),可能還沒(méi)有使用過(guò)這種編程方式。表達(dá)式可以表示閉包注意和數(shù)學(xué)傳統(tǒng)意義上的不同。意思就是說(shuō),只要是接口類型,我們都可以傳入表達(dá)式。在包下定義了各種函數(shù)接口 函數(shù)式編程 說(shuō)lambdas前,先理解下什么是函數(shù)式編程,如果你是個(gè)純Java程序員,而且之前一直是沒(méi)有使用過(guò)Java8,可能還沒(méi)有使用過(guò)這種編程方...

    Betta 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<