中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java8新特性Optional有哪些用法

發布時間:2020-05-18 14:00:29 來源:億速云 閱讀:358 作者:小新 欄目:編程語言

今天小編給大家分享的是Java8新特性Optional有哪些用法,相信很多人都不太了解,為了讓大家更加了解Optional,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

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

1、of

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

Optional<Integer> optional = Optional.of(13);
System.out.println(optional)

2、ofNullable

為指定的值創建一個Optional,如果指定的值為null,則返回一個空的Optional。

Optional<String> optional2 = Optional.ofNullable(null);
System.out.println(optional2);
optional2 = Optional.ofNullable("aaa");
System.out.println(optional2);

3、isPresent

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

Optional<String> 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<String> optional1 = Optional.ofNullable(str1);
    Optional<String> 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<String> optional1 = Optional.ofNullable(str1);
    Optional<String> 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<Integer> 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<String> list = new ArrayList<String>(){
       {
            add("aaa");
            add("bbb");
            add(null);
       }
   };

   list.stream().forEach(temp ->{
        Optional<String> 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<String> opt1 = Optional.ofNullable("aaa");
    Optional<String> 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<String> opt1 = Optional.ofNullable("aabbbbaa");
    Optional<String> 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有哪些用法的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兴市| 治多县| 砚山县| 卢龙县| 汾阳市| 龙里县| 屏东市| 湘阴县| 方山县| 图木舒克市| 文成县| 固阳县| 马鞍山市| 连州市| 阳谷县| 长顺县| 张北县| 浠水县| 朝阳县| 宁武县| 阿勒泰市| 双江| 黄骅市| 陇南市| 洛扎县| 富阳市| 黔江区| 万荣县| 红桥区| 股票| 洞口县| 丰都县| 巴塘县| 衡阳市| 石林| 镇江市| 新丰县| 广灵县| 玉树县| 大田县| 新龙县|