可選型別與單子
單子是函數語言程式設計的關鍵概念。單子是一種設計模式,用於表示缺失值。它允許封裝潛在的空值,允許在其周圍進行轉換,並在存在時提取實際值。根據定義,單子是一組以下引數。
引數化型別 − 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
廣告