Java 9 中 Optional 類新增了哪些方法?


**Optional 類**提供了一個可能包含或可能不包含**非空**值的容器。Java 8 中引入了 Optional 類,以減少程式碼中可能生成**NullPointerException** 的位置數量。Java 9 為 Optional 類添加了三個新方法:**or()**、**ifPresentOrElse()** 和 **stream()**,這些方法可以幫助我們處理**預設**值。

Optional.or()

Java 9 中引入了**or()** 方法,此方法的引數是一個函式式介面**Supplier**。此方法始終為我們提供一個非空的**Optional** 物件。如果 Optional 物件非空,則返回該**Optional** 物件本身。否則,它將返回一個由**Supplier** 建立的 Optional 物件。

示例

import java.io.IOException;
import java.util.Optional;
public class OptionalOrMethodTest {
   public static void main(String[] args) throws IOException {
      String str = null;
      Optional<String> opt = Optional.ofNullable(str);
      Optional<String> result = opt.or(() -> Optional.of("Adithya"));
      System.out.println(result);
   }  
}

輸出

Optional[Adithya]


Optional.ifPresentOrElse()

Java 9 中引入了**ifPresentOrElse()** 方法。它類似於**ifPresent()** 方法,區別在於我們添加了另一個**Runnable** 引數。如果**Optional** 物件為空,則可以執行**Runnable** 介面的物件。

示例

import java.util.Optional;
public class OptionalIfPresentOrElseTest {
   public static void main(String[] args) {
      String str = null;
      Optional<String> opt = Optional.ofNullable(str);
      opt.ifPresentOrElse(
            x -> System.out.println(x),
            () -> System.out.println("No value"));
   }
}

輸出

No value


Optional.stream()

自 Java 9 起支援**Optional.stream()** 方法。此方法可用於從**Optional** 物件建立一個新的流物件。如果 Optional 物件包含一個值,則返回包含該值的流物件。

示例

import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalStreamMethodTest {
   public static void main(String[] args) throws IOException {
      List<Optional<String>> list = List.of(
            Optional.of("Jai"),
            Optional.empty(),
            Optional.of("Adithya"));
      Stream<String> stream = list.stream().flatMap(Optional::stream);
      stream.forEach(System.out::println);
   }
}

輸出

Jai
Adithya

更新於:2020年2月21日

182 次檢視

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.