在Java中,Optional
類被設計用來避免空指針異常(NullPointerException),它提供了一種優雅的方式來處理可能為null的值。你可以使用 Optional
的鏈式調用來簡化代碼并提高可讀性。
以下是一些使用 Optional
進行鏈式調用的常見方法:
創建 Optional 對象:
Optional.of(value)
創建一個包含非空值的 Optional
。Optional.ofNullable(value)
創建一個可以包含空值的 Optional
。Optional.empty()
創建一個空的 Optional
。鏈式調用方法:
map(Function<? super T, ? extends U> mapper)
:如果存在值,則應用函數并返回一個新的 Optional
。flatMap(Function<? super T, Optional<U>> mapper)
:與 map
類似,但函數返回的是 Optional
。filter(Predicate<? super T> predicate)
:如果存在值且滿足條件,則返回包含該值的 Optional
,否則返回 Optional.empty()
。orElse(T other)
:如果存在值,則返回該值,否則返回指定的默認值。orElseGet(Supplier<? extends T> other)
:如果存在值,則返回該值,否則通過提供的供應器生成一個默認值。orElseThrow(Supplier<? extends X> exceptionSupplier)
:如果存在值,則返回該值,否則拋出由供應器生成的異常。import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
// 創建 Optional 對象
Optional<String> optionalString = Optional.ofNullable("Hello");
// 鏈式調用 map 方法
Optional<Integer> lengthOptional = optionalString.map(String::length);
System.out.println(lengthOptional.orElse(0)); // 輸出: 5
// 鏈式調用 flatMap 方法
Optional<Optional<String>> nestedOptional = Optional.of(Optional.of("Nested"));
Optional<String> flattenedOptional = nestedOptional.flatMap(Optional::stream);
System.out.println(flattenedOptional.orElse("Empty")); // 輸出: Nested
// 鏈式調用 filter 方法
Optional<String> filteredOptional = optionalString.filter(s -> s.length() > 3);
System.out.println(filteredOptional.orElse("Short")); // 輸出: Hello
// 使用 orElse 方法
String result1 = optionalString.orElse("Default");
System.out.println(result1); // 輸出: Hello
// 使用 orElseGet 方法
String result2 = optionalString.orElseGet(() -> "Generated");
System.out.println(result2); // 輸出: Hello
// 使用 orElseThrow 方法
try {
String result3 = optionalString.orElseThrow(() -> new RuntimeException("Value not present"));
System.out.println(result3);
} catch (RuntimeException e) {
System.out.println(e.getMessage()); // 不會執行到這里
}
}
}
map
和 flatMap
方法都不會改變原始 Optional
的值,而是返回一個新的 Optional
。filter
方法會根據條件決定是否保留原始值。orElse
和 orElseGet
方法用于提供默認值,但 orElseGet
更適合于昂貴的計算,因為它只在需要時才會調用供應器。orElseThrow
方法用于在 Optional
為空時拋出異常。通過這些方法,你可以靈活地使用 Optional
進行鏈式調用,從而編寫更簡潔和安全的代碼。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。