摘要:的表達(dá)式的一個大亮點是引入表達(dá)式,使用它設(shè)計的代碼會更加簡潔。表達(dá)式其實是一個匿名函數(shù)。匿名方法的寫法定義一個接口,接口的方法是判斷是否滿足的條件。
Java8的Lambda 表達(dá)式
Java 8的一個大亮點是引入Lambda表達(dá)式,使用它設(shè)計的代碼會更加簡潔。Lambda 表達(dá)式其實是一個匿名函數(shù)。
一、演變過程
1.普通方法的寫法
定義一個Hero對象,存儲英雄的屬性 public class Hero implements Comparable{ /** * 英雄名 */ public String name; /** * 血量 */ public float hp; /** * 傷害 */ public int damage.......
篩選出,滿足下面條件的英雄類
private static void filter(Listheros) { for (Hero hero : heros) { if (hero.hp > 100 && hero.damage < 50) System.out.print(hero); } }
這種方式,如果篩選條件改變,需要重新再寫一個方法,稍微麻煩一點。
2.匿名方法的寫法
定義一個接口,接口的方法是判斷是否滿足的條件。
public interface IHeroChecker { /** * 判斷Hero是否滿足條件 * @param h * @return */ public boolean checker(Hero h); }
寫一個過濾方法,判斷條件是調(diào)用IHeroChecker對象的checker方法,其實就是這個方法中要使用另一個類的方法。
private static void filter(Listheros,IHeroChecker checker) { for (Hero hero : heros) { if(checker.checker(hero)) System.out.print(hero); } } //匿名類對實現(xiàn)此判斷方法 IHeroChecker checker = new IHeroChecker() { @Override public boolean checker(Hero h) { return (h.hp>100 && h.damage<50); } }; filter(heros,checker);
使用匿名類實現(xiàn)這個方法,再調(diào)用filter方法
3.Lambda 表達(dá)式的寫法
使用Lambda 表達(dá)式就不用寫匿名類了,將匿名類演變成Lambda表達(dá)式;
1.把匿名類外面的殼子去掉,只保留方法參數(shù)和方法體;
2.參數(shù)和方法體之間加上符號 ->
3.把return和{}去掉
4.只有一個參數(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ù)進(jìn)行傳遞的編程思想。java執(zhí)行時,還是會將他變成匿名類的.
三、Lambda表達(dá)式弊端
1.可讀性差,匿名類代碼結(jié)構(gòu)比較起來,Lambda表達(dá)式一旦變得比較長,不好理解; 2.不便于調(diào)試,很難在Lambda表達(dá)式中增加調(diào)試信息; 3.版本支持,在JDK8以后才有,之前的版本不支持。
四、Lambda表達(dá)式方法的引用
前面我們講了,Lambda表達(dá)式其實就是一個方法,把{}和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.引用對象的方法
引用LambdaTest對象中testHero方法
LambdaTest lambdaTest = new LambdaTest(); filter(heros, lambdaTest::testHero);
3.引用容器對象的方法
在Hero對象中有
private boolean matched(){ return (hp > 100 && damage < 50); }
在Lambda表達(dá)式中使用
filter(heros, h -> h.matched());
直接引用
filter(heros, Hero::matched);
五、總結(jié)
可以認(rèn)為Lambda表達(dá)式可以看做是一個方法,我們把這個方法直接可以傳遞到另一個方法中。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77817.html
摘要:初體驗下面進(jìn)入本文的正題表達(dá)式。接下來展示表達(dá)式和其好基友的配合。吐槽一下方法引用表面上看起來方法引用和構(gòu)造器引用進(jìn)一步簡化了表達(dá)式的書寫,但是個人覺得這方面沒有的下劃線語法更加通用。 感謝同事【天錦】的投稿。投稿請聯(lián)系 tengfei@ifeve.com 本文主要記錄自己學(xué)習(xí)Java8的歷程,方便大家一起探討和自己的備忘。因為本人也是剛剛開始學(xué)習(xí)Java8,所以文中肯定有錯誤和理解偏...
摘要:而在中,表達(dá)式是對象,它們必須依附于一類特別的對象類型函數(shù)式接口。即表達(dá)式返回的是函數(shù)式接口類型。 Java8被稱作Java史上變化最大的一個版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表達(dá)式和Stream API。這兩者也可以結(jié)合在一起使用。首先來看下什么是Lambda表達(dá)式。Lambda表達(dá)式,維基百科上的解釋是一種用于表示匿名函數(shù)和閉包的運算符,感覺看到這個解釋...
摘要:很多語言等從設(shè)計之初就支持表達(dá)式。注意此時外部局部變量將自動變?yōu)樽鳛榉椒ǚ祷刂道臃祷嘏袛嘧址欠駷榭张袛嘧址欠駷榭战裉礻P(guān)于新特性表達(dá)式就講到這里了,接下來我會繼續(xù)講述新特性之函數(shù)式接口。 上一篇文章我們了解了Java8新特性-接口默認(rèn)方法,接下來我們聊一聊Java8新特性之Lambda表達(dá)式。 Lambda表達(dá)式(也稱為閉包),它允許我們將函數(shù)當(dāng)成參數(shù)傳遞給某個方法,或者把代碼...
摘要:之前,使用匿名類給蘋果排序的代碼是的,這段代碼看上去并不是那么的清晰明了,使用表達(dá)式改進(jìn)后或者是不得不承認(rèn),代碼看起來跟清晰了。這是由泛型接口內(nèi)部實現(xiàn)方式造成的。 # Lambda表達(dá)式在《Java8實戰(zhàn)》中第三章主要講的是Lambda表達(dá)式,在上一章節(jié)的筆記中我們利用了行為參數(shù)化來因?qū)Σ粩嘧兓男枨螅詈笪覀円彩褂玫搅薒ambda,通過表達(dá)式為我們簡化了很多代碼從而極大地提高了我們的...
摘要:使用表達(dá)式,使得應(yīng)用變得簡潔而緊湊。很多語言等從設(shè)計之初就支持表達(dá)式。表達(dá)式的參數(shù)與函數(shù)式接口內(nèi)方法的參數(shù),返回值類型相互對應(yīng)。更多教程和資料請上騰訊課堂樂字節(jié) showImg(https://segmentfault.com/img/bVbtotg?w=935&h=345); Java8 引入Lambda表達(dá)式,允許開發(fā)者將函數(shù)當(dāng)成參數(shù)傳遞給某個方法,或者把代碼本身當(dāng)作數(shù)據(jù)進(jìn)行處理。...
摘要:函數(shù)式編程說前,先理解下什么是函數(shù)式編程,如果你是個純程序員,而且之前一直是沒有使用過,可能還沒有使用過這種編程方式。表達(dá)式可以表示閉包注意和數(shù)學(xué)傳統(tǒng)意義上的不同。意思就是說,只要是接口類型,我們都可以傳入表達(dá)式。在包下定義了各種函數(shù)接口 函數(shù)式編程 說lambdas前,先理解下什么是函數(shù)式編程,如果你是個純Java程序員,而且之前一直是沒有使用過Java8,可能還沒有使用過這種編程方...
閱讀 2030·2021-08-21 14:09
閱讀 494·2019-08-30 15:44
閱讀 2117·2019-08-29 16:32
閱讀 1381·2019-08-29 15:36
閱讀 3450·2019-08-29 12:43
閱讀 2787·2019-08-29 11:14
閱讀 438·2019-08-28 18:26
閱讀 2259·2019-08-26 13:57