可選型別與單子



單子是函數語言程式設計的關鍵概念。單子是一種設計模式,用於表示缺失值。它允許封裝潛在的空值,允許在其周圍進行轉換,並在存在時提取實際值。根據定義,單子是一組以下引數。

  • 引數化型別 − M<T>

  • 單元函式 − T −> M<T>

  • 繫結操作 − M<T> 繫結 T −> M<U> = M<U>

關鍵操作

  • 左恆等律 − 如果一個函式繫結到特定值的單子上,則其結果將與將函式應用於該值的結果相同。

  • 右恆等律 − 如果單子返回值方法與原始值的單子相同。

  • 結合律 − 函式可以按任意順序應用於單子。

Optional 類

Java 8 引入了 Optional 類,它是一個單子。它提供了與單子等效的操作。例如,return 是一個獲取值並返回單子的操作。Optional.of() 獲取引數並返回 Optional 物件。類似地,bind 是一個將函式繫結到單子以生成單子的操作。Optional.flatMap() 是一個對 Optional 執行操作並將其結果作為 Optional 返回的方法。

  • 引數化型別 − Optional<T>

  • 單元函式 − Optional.of()

  • 繫結操作 − Optional.flatMap()

示例 − 左恆等律

以下示例演示了 Optional 類如何遵循左恆等律。

import java.util.Optional;
import java.util.function.Function;

public class FunctionTester {
   public static void main(String[] args) {
      Function<Integer, Optional<Integer>> addOneToX 
         = x −> Optional.of(x + 1);
      System.out.println(Optional.of(5).flatMap(addOneToX)
         .equals(addOneToX.apply(5)));
   } 
}

輸出

true

示例 − 右恆等律

以下示例演示了 Optional 類如何遵循右恆等律。

import java.util.Optional;

public class FunctionTester {
   public static void main(String[] args) {
      System.out.println(Optional.of(5).flatMap(Optional::of)
         .equals(Optional.of(5)));
   } 
}

輸出

true

示例 - 結合律

以下示例演示了 Optional 類如何遵循結合律。

import java.util.Optional;
import java.util.function.Function;

public class FunctionTester {
   public static void main(String[] args) {
      Function<Integer, Optional<Integer>> addOneToX 
         = x −> Optional.of(x + 1);
      Function<Integer, Optional<Integer>> addTwoToX 
         = x −> Optional.of(x + 2);
      Function<Integer, Optional<Integer>> addThreeToX 
         = x −> addOneToX.apply(x).flatMap(addTwoToX);
      Optional.of(5).flatMap(addOneToX).flatMap(addTwoToX)
         .equals(Optional.of(5).flatMap(addThreeToX));
   } 
}

輸出

true
廣告

© . All rights reserved.