java8中的lambda

早些年寫的:0

用過一段scala,再用java,總是不能忍受冗余拖沓的java,但是scala不是哪個(gè)地方都能用,java這把武器還是得用。java8之后引入lamdba,刀更好用了。
開一個(gè)玩笑話,使用lambda之后,代碼能少個(gè)1/3,少了糾結(jié)的匿名類,少了冗余for循環(huán)和if..else。多了簡(jiǎn)潔的lamdba表達(dá)式,強(qiáng)大的streamApi,還有增強(qiáng)版的interface。
工作多年以來,Assembler模式必不可少,為了是隔離變化,為是PO與DTO的轉(zhuǎn)化,為的是PO與Model轉(zhuǎn)化,減少重復(fù)代碼才能提高質(zhì)量。匿名來一直沖在前面,一個(gè)靜態(tài)方法+無數(shù)個(gè)匿名Callback遍布各個(gè)角落。閉包的到來緩解這種情況,刀更輕巧了。雖然有點(diǎn)笨重,比不上c的函數(shù)指針,至少封裝得更好,在應(yīng)用層面用得更舒服。

for循環(huán)和 if...else 只是為了能在茫茫大海中,找出心目中你。

  public List<String> filterXXX(List<String> beFinds){
        if(beFinds == null || beFinds.isEmpty()){
            return null;
        }
        List<String> founds = new ArrayList();
        for(String s:beFinds){
            if(....){
                founds.add(s);
            }
        }
        return founds;
        
    }

這樣的代碼,不知道在手中彈過多少次!每寫一次這樣的代碼都要糾結(jié)一次,在沒有StreamApi的時(shí)代,只能靠GoogleGuava緩解一下。每閱讀到這樣的代碼,都要想下:我能讀懂其中的含義。每改一次這樣的代碼,祈禱不要改錯(cuò)。StreamAPI不是最強(qiáng)大的工具,沒有scala那么好,但是已經(jīng)足夠讓javaer將代碼優(yōu)化更好,更好閱讀,更好修改。千言萬語(yǔ)化成:

    beFinds.stream().filter(s->{...}).collect(Collectors.toList());

增強(qiáng)版的interface只是加了 默認(rèn)方法而已,但是無疑給它加上翅膀,使之接口的含義更加豐滿,雖然它有點(diǎn)像scala的trait。
定義一個(gè)Duration接口,傳統(tǒng)方式只有做到此:

public interface Duration {
    Date getEndTime();
    Date getBeginTime();
}

相關(guān)的邏輯只能在實(shí)現(xiàn)類實(shí)現(xiàn),但是default方法的到來,可以變?yōu)?/p>

public interface Duration {
    Date getEndTime();
    Date getBeginTime();
    public default boolean contains(Date d){
        return getBeginTime().before(d) && d.before(getBeginTime());
    }
    public default Long interval(){
        return getEndTime().getTime()-getBeginTime().getTime();
    }
}

這樣的接口才是有生命,有豐富多彩的行為,是名副其實(shí)的接口,而不是僅僅是一個(gè)概念的表達(dá)。進(jìn)一步的說:抽象類的作用會(huì)被減弱,接口類會(huì)大大增強(qiáng)。也許它的引入,會(huì)導(dǎo)致多繼承的問題,但是這些都不是問題,畢竟一把好刀被打磨之后,也需要大俠磨合一段時(shí)間!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對(duì)于一個(gè)新事物,我們應(yīng)該從這三方面來認(rèn)識(shí),是什么?為什么會(huì)出現(xiàn)?怎么用? 一、Lambda表達(dá)式是什么? 它是Ja...
    代碼不會(huì)寫閱讀 516評(píng)論 0 2
  • 使用java8的蘭姆達(dá)表達(dá)式會(huì)報(bào)錯(cuò): Error:Jack is required to support java...
    12排閱讀 365評(píng)論 0 0
  • 一個(gè)簡(jiǎn)單實(shí)例
    gada閱讀 433評(píng)論 0 0
  • 彷徨著 無助著 失去自己吧 時(shí)間攪碎夢(mèng)想啊 不知去了何方 世間冰冷黑暗 純真還在嗎 吃飯 睡覺 我一切還好啊 還要...
    記憶的帆閱讀 187評(píng)論 1 5
  • 今天推薦這本書是一本新書,中文版最近才翻譯出來,很有看頭,如果對(duì)未來感到迷茫卻不知何去何從,或者充滿希望卻無從下手...
    知識(shí)要火的聊公子閱讀 247評(píng)論 0 0

友情鏈接更多精彩內(nèi)容