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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP