今天在学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);
}

最新文章

  1. 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta
  2. Linux IPC System V 信号量
  3. Web API 接口
  4. jsp标签精华(持续更新中)
  5. 【BZOJ2595】游览计划(状压DP,斯坦纳树)
  6. DoTween(HOTween V2) 教程
  7. python_Day3[set集合,函数,全局变量之篇]
  8. xmlns与targetNamespace
  9. 感知机(python实现)
  10. Party
  11. GC日志分析
  12. SerialChart串口示波器的成功调试
  13. [Swift]LeetCode140. 单词拆分 II | Word Break II
  14. Python内置函数(25)——getattr
  15. 2018.12/17 function 的闭包
  16. 使用配置文件自定义Ribbon配置
  17. 04LaTeX学习系列之---overleafz在线编辑平台的使用
  18. win7 64 下 VS2008 调试、退出时错误的解决
  19. LintCode: Valid Parentheses
  20. 【BZOJ1046】[HAOI2007]上升序列

热门文章

  1. CF468E Permanent 题解
  2. How to present a paper 怎么讲好一篇文献
  3. elasticsearch别名
  4. npm 局部安装 jbrowse
  5. Lua文件夹及文件操作
  6. pip设置镜像
  7. python菜鸟学习: 11. 装饰器的基础用法
  8. QT部署安装以及后续更新(一)
  9. 2.4 OpenEuler中C语言中的函数调用测试
  10. Pytorch实战学习(五):多分类问题