日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java8————Optional

發(fā)布時(shí)間:2025/3/12 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java8————Optional 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

Optional 類是一個(gè)可以為null的容器對(duì)象。如果值存在則isPresent()方法會(huì)返回true,調(diào)用get()方法會(huì)返回該對(duì)象。

Optional 是個(gè)容器:它可以保存類型T的值,或者僅僅保存null。Optional提供很多有用的方法,這樣我們就不用顯式進(jìn)行空值檢測(cè)。

Optional 類的引入很好的解決空指針異常。

?

示例代碼

/*** Optional使用詳解: 使用 Optional 時(shí)盡量不直接調(diào)用 Optional.get() 方法, Optional.isPresent()* 更應(yīng)該被視為一個(gè)私有方法, 應(yīng)依賴于其他像 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. 三個(gè)構(gòu)造器 */// 它要求傳入的 obj 不能是 null 值的, 否則還沒開始進(jìn)入角色就倒在了 NullPointerException 異常上.Optional<User> opt1 = Optional.of(new User());// value == null ? empty() : of(value);Optional<User> opt2 = Optional.ofNullable(null);// 直接返回一個(gè)空的Optional對(duì)象Optional<User> opt3 = Optional.empty();System.out.println("#1 output: " + opt1 + " , " + opt2 + " , " + opt3);/* 2. 存在即返回, 無(wú)則提供默認(rèn)值 */// 這種方法可以取代三目運(yùn)算符的非空判斷與默認(rèn)值賦值。User u = opt1.orElse(new User(2, "小明"));User u2 = opt2.orElse(new User(2, "小明"));System.out.println("#2 output: " + u + " ; " + u2);/* 3.存在即返回, 無(wú)則由函數(shù)來產(chǎn)生 ,和上一個(gè)類似 */User u3 = opt2.orElseGet(() -> {return new User(3, "波多老師");});// 或者寫成 >>> User u3 = opt2.orElseGet(() -> new User(3,"波多老師"));System.out.println("#3 output: " + u3);/* 4. 存在就對(duì)它做點(diǎn)什么 */opt1.ifPresent(user -> System.out.println("#4 output: " + user.getName()));opt2.ifPresent(user -> System.out.println("#4 output: " + user.getName()));/* 5. map函數(shù) */// map函數(shù)判斷isPresent() == true時(shí),執(zhí)行參數(shù)列表中的代碼,以為返回的是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);// 多個(gè)map級(jí)聯(lián)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 + "}";}}

執(zhí)行結(jié)果:

?

總結(jié)

以上是生活随笔為你收集整理的Java8————Optional的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。