Java8————Optional
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Java8————Optional
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                引言
Optional 類是一個可以為null的容器對象。如果值存在則isPresent()方法會返回true,調用get()方法會返回該對象。
Optional 是個容器:它可以保存類型T的值,或者僅僅保存null。Optional提供很多有用的方法,這樣我們就不用顯式進行空值檢測。
Optional 類的引入很好的解決空指針異常。
?
示例代碼
/*** Optional使用詳解: 使用 Optional 時盡量不直接調用 Optional.get() 方法, Optional.isPresent()* 更應該被視為一個私有方法, 應依賴于其他像 Optional.orElse(), Optional.orElseGet(), Optional.map()* 等這樣的方法. <br>* 類名:T<br>* 作者: mht<br>* 日期: 2018年9月2日-下午10:47:42<br>*/ public class T {public static void main(String[] args) {/* 1. 三個構造器 */// 它要求傳入的 obj 不能是 null 值的, 否則還沒開始進入角色就倒在了 NullPointerException 異常上.Optional<User> opt1 = Optional.of(new User());// value == null ? empty() : of(value);Optional<User> opt2 = Optional.ofNullable(null);// 直接返回一個空的Optional對象Optional<User> opt3 = Optional.empty();System.out.println("#1 output: " + opt1 + " , " + opt2 + " , " + opt3);/* 2. 存在即返回, 無則提供默認值 */// 這種方法可以取代三目運算符的非空判斷與默認值賦值。User u = opt1.orElse(new User(2, "小明"));User u2 = opt2.orElse(new User(2, "小明"));System.out.println("#2 output: " + u + " ; " + u2);/* 3.存在即返回, 無則由函數來產生 ,和上一個類似 */User u3 = opt2.orElseGet(() -> {return new User(3, "波多老師");});// 或者寫成 >>> User u3 = opt2.orElseGet(() -> new User(3,"波多老師"));System.out.println("#3 output: " + u3);/* 4. 存在就對它做點什么 */opt1.ifPresent(user -> System.out.println("#4 output: " + user.getName()));opt2.ifPresent(user -> System.out.println("#4 output: " + user.getName()));/* 5. map函數 */// map函數判斷isPresent() == true時,執行參數列表中的代碼,以為返回的是Optional<T>所以可以配合orElse和orElseGet一起使用。User qiao = new User(100, "da-qiao-wei-jiu");String name = opt2.map(user -> user.getName()).orElseGet(() -> qiao.getName());System.out.println("#5 output: " + name);// 多個map級聯Optional<User> teacherOpt = Optional.of(new User(19, "da-qiao-wei-jiu"));String name2 = teacherOpt.map(user -> user.getName()).map(n -> n.toUpperCase()).orElse("sss");System.out.println("#6 output: " + name2);} }class User {private Integer score = 1;private String name = "蒼老師";public User() {}public User(Integer score, String name) {this.score = score;this.name = name;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "{score : " + score + ", name : " + name + "}";}}執行結果:
?
總結
以上是生活随笔為你收集整理的Java8————Optional的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: String StringBuilder
- 下一篇: Java并发编程实战————可重入内置锁
