溫馨提示×

溫馨提示×

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

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

如何用Optional進行鏈式調用

發布時間:2025-04-14 16:01:48 來源:億速云 閱讀:152 作者:小樊 欄目:編程語言

在Java中,Optional 類被設計用來避免空指針異常(NullPointerException),它提供了一種優雅的方式來處理可能為null的值。你可以使用 Optional 的鏈式調用來簡化代碼并提高可讀性。

以下是一些使用 Optional 進行鏈式調用的常見方法:

  1. 創建 Optional 對象

    • 使用 Optional.of(value) 創建一個包含非空值的 Optional。
    • 使用 Optional.ofNullable(value) 創建一個可以包含空值的 Optional。
    • 使用 Optional.empty() 創建一個空的 Optional。
  2. 鏈式調用方法

    • 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()); // 不會執行到這里
        }
    }
}

注意事項

  • mapflatMap 方法都不會改變原始 Optional 的值,而是返回一個新的 Optional。
  • filter 方法會根據條件決定是否保留原始值。
  • orElseorElseGet 方法用于提供默認值,但 orElseGet 更適合于昂貴的計算,因為它只在需要時才會調用供應器。
  • orElseThrow 方法用于在 Optional 為空時拋出異常。

通過這些方法,你可以靈活地使用 Optional 進行鏈式調用,從而編寫更簡潔和安全的代碼。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女