今天同事問的一個問題,請將下面的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能解決的就不必要特別用上面的寫法。
沒有留言:
張貼留言