網頁

2018/8/20

Java 8 用Optional來代替if else敘述

今天同事問的一個問題,請將下面的if else敘述用Java 8的lambda改寫。

String value = "19";
String result = null;
if(value.equals("18") || value.equals("19")) {
    result = "Y";
} else {
    result = "N";
}

試了一下可以用Optional的API改寫如下。

String result = Optional.ofNullable(value)
                    .filter(e -> e.equals("18") || e.equals("19"))
                    .map(v -> "Y")
                    .orElse("N");

首先先用Optional.ofNullable()方法取得裝載value的Optional物件。
接著呼叫filter()方法來判斷是否符合條件,若符合條件則回傳裝有原value的Optional物件,否則回傳Optional.empty()
接著呼叫map(),如果Optional載有值,則回傳Y,否則回傳Optional.empty()
最後呼叫orElse(),如果Optional載有值則回傳原值,否則回傳N

可讀性很好嗎?我覺得不那麼好用。



在寫這篇文章後一年持續寫lambda之後,已經蠻習慣上面的寫法了,當初覺得不好用也是因為很不習慣lambda,但不用為了用而用,如果if else能解決的就不必要特別用上面的寫法。


沒有留言:

張貼留言