国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 8 Optional 簡介

waltr / 477人閱讀

摘要:本文簡單介紹中的最常用法。在業務邏輯中使用判斷的值是否為空,可以用方法,例如系統屬性不存在。標準的用法應該是用方法。如下所示這樣的語句比判斷簡潔的多。不過,這個遺憾在中得到了補足。但同樣,設計出來并不是這么用的。

本文簡單介紹 Java 8 中 Optional 的最常用法。

創建 Optional

創建 Optional 有三個方法,如下所示:

// 方法1:參數不能為 null,否則會拋出異常
Optional stringOptional = Optional.of("success");  

// 方法2:無法確定參數是否為 null 時,使用這個方法
Optional appNameOptional = Optional.ofNullable(System.getProperty("AppName"));

// 方法3:需要返回一個不含值的 Optional 對象時,使用這個方法
Optional emptyOptional = Optional.empty();
注意:Optional 對象的值是不可修改的。
在業務邏輯中使用 Optional

判斷 Optional 的值是否為空,可以用 isPresent() 方法,例如:

Optional appNameOptional = 
        Optional.ofNullable(System.getProperty("AppName"));
        
if (!appNameOptional.isPresent()) {
    System.out.println("系統屬性 AppName 不存在。");
}

Optional 設計出來并不是這么用的。標準的用法應該是用 ifPresent() 方法。如下所示:

Optional.ofNullable(System.getProperty("AppName"))
        .ifPresent(appname -> System.out.println("AppName = " + appname));

這樣的語句比 if 判斷簡潔的多。

Java 8 的 Optional 類并沒有 ifNotPresent() 這樣的方法。不過,這個遺憾 在 Java 9 中得到了補足。

從 Optional 對象取值

最簡單的取值方法就是 get() 方法了,不用什么例子就看得懂。但同樣,Optional 設計出來并不是這么用的。Optional 有更好的取值方法 orElse()orElseGet(),它們甚至用來代替 if 語句:

// 當系統屬性 AppName 不存在時,返回 "DefaultAppName"
String appName = Optional
        .ofNullable(System.getProperty("AppName"))
        .orElse("DefaultAppName");
        
// 當缺省值需要調用另外的方法獲得時,可以這樣實現
String appName = Optional
        .ofNullable(System.getProperty("AppName"))
        .orElseGet(() -> getFromOtherPlace());

此外如果你希望 Optional 為空時拋出異常,可以用 orElseThrow() 方法:

String appName = Optional
        .ofNullable(System.getProperty("AppName"))
        .orElseThrow(() -> new IllegalStateException("AppName is empty"));
生成新的 Optional

前面提到 Optional 的值是不可以改的,但如果當前 Optional 對象的內容不是我想要的怎么辦? Optional 提供了幾個方便的方法,如下所示:

// map() 方法根據當前 Optional 的值生成一個新的 Optional
Optional message = Optional
        .ofNullable(System.getProperty("AppName"))
        .map(appname -> "App name is " + appname);
        
// filter() 方法檢查 Optional 的值是否滿足條件,如果
// 滿足則返回自身,否則返回 Optional.empty()
Optional message = Optional
        .ofNullable(System.getProperty("AppName"))
        .filter(appname -> appname.length() > 0);
綜合示例:

下面是一個沒有用 Optional 的例子:

List searchResults = Collections.emptyList();
String keyword = parameters.get("keyword");

if (keyword != null) {
    String fixedKeyword = "%" + keyword.toUpperCase() + "%";
    searchResults = search(fixedKeyword);
}

System.out.println("搜索結果:" + searchResults.size() + " 個");

用了 Optional 之后:

List searchResults = Optional
        .ofNullable(parameters.get("keyword"))
        .map(keyword -> "%" + keyword.toUpperCase() + "%")
        .map(fixedKeyword -> search(fixedKeyword))
        .orElse(Collections.emptyList());

System.out.println("搜索結果:" + searchResults.size() + " 個");

當然,上面這個例子中,兩個 map() 方法可以寫在一起,這個可以根據自己的喜好來了。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70120.html

相關文章

  • Java 8 新特性之Optional

    摘要:概述簡介類是一個容器類,代表一個值存在或不存在,原來用表示一個值不存在,現在可以更好的表達這個概念,并且可以避免空指針異常。否則返回字符串長度為與類似,要求返回值必須是字符串長度為本文首發于凌風博客新特性之類作者凌風 1. 概述 1.1 簡介 Optional 類(java.util.Optional)是一個容器類,代表一個值存在或不存在,原來用 null 表示一個值不存在,現在 Op...

    Little_XM 評論0 收藏0
  • java 8 實戰》讀書筆記 -第五章 使用流

    摘要:比如,你可以建立一個,選出熱量超過卡路里的頭三道菜請注意也可以用在無序流上,比如源是一個。跳過元素流還支持方法,返回一個扔掉了前個元素的流。一般來說,應該使用來對這種流加以限制,以避免打印無窮多個值。 一、篩選和切片 1.用謂詞篩選 Streams接口支持filter方法。該操作會接受一個謂詞(一個返回boolean的函數)作為參數,并返回一個包括所有符合謂詞的元素的流。例如篩選出所有...

    Richard_Gao 評論0 收藏0
  • Java8學習小記

    摘要:但有一個限制它們不能修改定義的方法的局部變量的內容。如前所述,這種限制存在的原因在于局部變量保存在棧上,并且隱式表示它們僅限于其所在線程。 2014年,Oracle發布了Java8新版本。對于Java來說,這顯然是一個具有里程碑意義的版本。尤其是那函數式編程的功能,避開了Java那煩瑣的語法所帶來的麻煩。 這可以算是一篇Java8的學習筆記。將Java8一些常見的一些特性作了一個概要的...

    CHENGKANG 評論0 收藏0
  • Java 8 新特性之Stream API

    摘要:簡而言之,提供了一種高效且易于使用的處理數據的方式。和以前的操作不同,操作還有兩個基礎的特征中間操作都會返回流對象本身。注意自己不會存儲元素不會改變源對象,相反,它們會返回一個持有結果的新操作時延遲執行的。為集合創建并行流。 1. 概述 1.1 簡介 Java 8 中有兩大最為重要的改革,第一個是 Lambda 表達式,另外一個則是 Stream API(java.util.strea...

    cooxer 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<