Optional 和 Monad
Monad 是函数式编程的一个关键概念。Monad 是一种设计模式,有助于表示缺失值。它允许包装潜在的空值,允许在其周围进行转换并提取实际值(如果存在)。根据定义,monad 是一组以下参数。
参数化类型 − M<T>
单元函数 − T −> M<T>
绑定操作 − M<T> bind T −> M<U> = M<U>
关键操作
左身份 − 如果函数绑定在特定值的 monad 上,则其结果将与将函数应用于该值时的结果相同。
右身份 − 如果 monad 返回方法与原始值上的 monad 相同。
结合性 − 函数可以以任何顺序应用于 monad。
Optional 类
Java 8 引入了 Optional 类,它是一个 monad。它提供与 monad 等效的操作。例如 return 是一个接受值并返回 monad 的操作。Optional.of() 接受参数并返回 Optional 对象。类似地,bind 是将函数绑定到 monad 以生成 monad 的操作。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
示例 − 正确身份
以下示例显示了可选类如何遵循正确身份规则。
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

