java8 簡明教程

哥哥做了佛 弟弟做了惡人,弟弟對哥哥說安心做你的佛 渡不了的人交給我!

0314154809.jpg

Lambda表達式

讓我們從最簡單的例子開始,來學(xué)習(xí)如何對一個string列表進行排序。我們首先使用Java 8之前的方法來實現(xiàn):

List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
 
Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});

靜態(tài)工具方法Collections.sort接受一個list,和一個Comparator接口作為輸入?yún)?shù),Comparator的實現(xiàn)類可以對輸入的list中的元素進行比較。通常情況下,你可以直接用創(chuàng)建匿名Comparator對象,并把它作為參數(shù)傳遞給sort方法。


除了創(chuàng)建匿名對象以外,Java 8 還提供了一種更簡潔的方式,Lambda表達式。

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});

Optional

Optional是一個嚴(yán)重被低估的功能,并且有潛力刪除很多困擾我們的NullPointerExceptions。這在代碼邊界中(要么是正在使用的API,要么是正在暴露的API)特別有用,因為它允許你和你的調(diào)用代碼來推理所期待的東西。

我們就可以把下面這樣的代碼進行改寫。

oldways

不過,千萬不要改寫成這副樣子

newways

這樣改寫非但不簡潔,而且其操作還是和第一段代碼一樣。

無非就是用isPresent方法來替代u==null。這樣的改寫并不是Optional正確的用法,我們再來改寫一次。

was1

這樣才是正確使用Optional的姿勢。那么按照這種思路,我們可以安心的進行鏈?zhǔn)秸{(diào)用,而不是一層層判斷了??匆欢未a:

public static String getChampionName(Competition comp) throws IllegalArgumentException {
    if (comp != null) {
        CompResult result = comp.getResult();
        if (result != null) {
            User champion = result.getChampion();
            if (champion != null) {
                return champion.getName();
            }
        }
    }
    throw new IllegalArgumentException("The value of param comp isn't available.");
}

讓我們使用Optional,這些代碼會變成什么樣子。

public static String getChampionName(Competition comp) throws IllegalArgumentException {
    return Optional.ofNullable(comp)
            .map(c->c.getResult())
            .map(r->r.getChampion())
            .map(u->u.getName())
            .orElseThrow(()->new IllegalArgumentException("The value of param comp isn't available."));
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • lambda表達式(又被成為“閉包”或“匿名方法”)方法引用和構(gòu)造方法引用擴展的目標(biāo)類型和類型推導(dǎo)接口中的默認方法...
    183207efd207閱讀 1,553評論 0 5
  • 第一章 為什么要關(guān)心Java 8 使用Stream庫來選擇最佳低級執(zhí)行機制可以避免使用Synchronized(同...
    謝隨安閱讀 1,562評論 0 4
  • 以下是《Java8簡明教程》的正文。 “Java并沒有沒落,人們很快就會發(fā)現(xiàn)這一點” 歡迎閱讀我編寫的Java 8...
    猿學(xué)閱讀 642評論 0 0
  • Java8 in action 沒有共享的可變數(shù)據(jù),將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說的函數(shù)式...
    鐵牛很鐵閱讀 1,358評論 1 2
  • 摘要:Shuffle是MapReduce編程模型中最耗時的一個步驟,而Spark將Shuffle過程分解成了Shu...
    cda766963c7e閱讀 1,328評論 0 1

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