今天在学scala的时候发现Option中有map和flatMap返回的都是Option,然后再java8中的Optional也存在这样两个函数,觉得有点多余。后来分析了一下,还是有存在的必要的。
1. map
函数
map
函数不用问,使用的很广泛,函数签名是public<U> Optional<U> map(Function<? super T, ? extends U> mapper)
,如入参是一个返回U的function。用法示例如下:
Optional
.ofNullable(11)
.map(a -> a * 2)
.orElse(0);
2. flatMap
函数
flatMap
函数的函数签名是public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
,他的存在的必要性,是因为在使用中,存在很多返回值是Optional的函数,为了在Optional使用这些函数时,返回结果能方便使用,如下可以看出来使用flatMap,对于后续的链式编程非常方便。
public static void main(String[] args) {
//对于calculate这种函数,使用flatMap的话,返回的结果还是Optional,方便使用
Optional<Integer> opt = Optional
.ofNullable(11)
.flatMap(a -> calculate(a));
//对于calculate这种函数,如果使用map,返回的结果嵌套了Optional
Optional<Optional<Integer>> opt2 = Optional
.ofNullable(11)
.map(a -> calculate(a));
}
public static Optional<Integer> calculate(int input) {
return Optional.of(input * 2);
}