首頁> Java> java教程> 主體

Java8新特性Optional的用法介紹(附程式碼)

不言
發布: 2019-04-13 11:55:48
轉載
4716 人瀏覽過

這篇文章帶給大家的內容是關於Java8新功能Optional的用法介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

Optional 類別(java.util.Optional)是容器類,代表一個值存在或不存在,原來用null表示一個值不存在,現在Optional可以更好的表達這個概念。並且可以避免空指針異常。

1、of

為非null的值建立一個Optional,如果值為null,則會拋出NullPointerException

Optional optional = Optional.of(13); System.out.println(optional)
登入後複製

2、ofNullable

#為指定的值建立一個Optional,如果指定的值為null,則傳回一個空的Optional。

Optional optional2 = Optional.ofNullable(null); System.out.println(optional2); optional2 = Optional.ofNullable("aaa"); System.out.println(optional2);
登入後複製

3、isPresent

如果值存在回傳true,否則回傳false。

Optional optional2 = Optional.ofNullable(null); System.out.println(optional2); System.out.println(optional2.isPresent()); optional2 = Optional.ofNullable("aaa"); System.out.println(optional2); System.out.println(optional2.isPresent());
登入後複製

4、get

如果Optional有值則將其傳回,否則拋出NoSuchElementException。

optional2 = Optional.ofNullable("aaa"); System.out.println(optional2); System.out.println(optional2.isPresent()); System.out.println(optional2.get());
登入後複製

5、ifPresent

如果Optional實例有值則為其呼叫consumer,否則不做處理 。隱士地其中進行了null判斷。

public static void main(String[] args) { String str1 = "hello"; String str2 = null; Optional optional1 = Optional.ofNullable(str1); Optional optional2 = Optional.ofNullable(str2); optional1.ifPresent(str->System.out.println(str.length())); optional2.ifPresent(str-> System.out.println(str.length())); }
登入後複製

6、orElse

如果有值則將其傳回,否則傳回指定的其它值。

public static void main(String[] args) { String str1 = "hello"; String str2 = null; Optional optional1 = Optional.ofNullable(str1); Optional optional2 = Optional.ofNullable(str2); System.out.println(optional1.orElse("默认字符串")); System.out.println(optional2.orElse("默认字符串")); }
登入後複製

7、orElseGet

orElseGet與orElse方法類似,差異在於得到的預設值。 orElse方法將傳入的一個值作為預設值,orElseGet方法可以接受Supplier介面的實作用來產生預設值

public static void main(String[] args) { Integer i = 20; Optional op = Optional.ofNullable(i); System.out.println(op.orElseGet(()->0)); System.out.println(Optional.ofNullable(null).orElseGet(()->0)); }
登入後複製

8、orElseThrow

##如果有值則將其傳回,否則拋出supplier介面創建的異常。

public static void main(String[] args) { // 自己指定异常 System.out.println((Optional.ofNullable("a").orElseThrow(()->new IndexOutOfBoundsException()))); System.out.println((Optional.ofNullable(null).orElseThrow(()->new IndexOutOfBoundsException()))); }
登入後複製
9、map

map處理有值的情況,如果有值,則對其執行呼叫map參數中的函數得到傳回值,否則傳回空Optional。

public static void main(String[] args) { List list = new ArrayList(){ { add("aaa"); add("bbb"); add(null); } }; list.stream().forEach(temp ->{ Optional opt = Optional.ofNullable(temp); System.out.println(opt.map(n -> { return n.toUpperCase(); }).orElse("Nothing")); }); // 简写为如下形式 list.stream().forEach(temp->{ System.out.println(Optional.ofNullable(temp).map(n->n.toUpperCase()).orElse("Nothing")); }); }
登入後複製
10、flatMap

如果有值,為其執行mapping函數傳回Optional類型傳回值,否則傳回空Optional。 flatMap與map(Funtion)方法類似,差別在於flatMap中的mapper回傳值必須是Optional。呼叫結束時,flatMap不會對結果用Optional封裝。可以將內容

public static void main(String[] args) { Optional opt1 = Optional.ofNullable("aaa"); Optional opt2 = Optional.ofNullable(null); System.out.println(opt1.flatMap(n->{ return Optional.ofNullable(n.toUpperCase()); }).orElse("还会没有吗")); System.out.println( opt2.flatMap(n->{ return Optional.ofNullable(n.toUpperCase()); }).orElse("还会没有吗")); }
登入後複製
11、filter

如果有值且滿足斷言條件傳回包含該值的Optional,否則傳回空Optional。

public static void main(String[] args) { Optional opt1 = Optional.ofNullable("aabbbbaa"); Optional opt2 = Optional.ofNullable(null); System.out.println(opt1.filter(value->value.length()>6)); System.out.println(opt2.filter(value->value.length()>6)); }
登入後複製
好了,Java8新功能之Optional就介紹到這裡了。

以上是Java8新特性Optional的用法介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!