Java8的flatMap函数,作用是:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。

见到的映射函数往往都只有一句话,连大括号都不需要加的,如下:

String personValue = Optional.ofNullable(map.get("person"))
.flatMap(value -> Optional.of(value.toString().trim()))
.orElse("");

可是如果映射函数里,可能会抛出异常,该怎么办?
方法也是使用try/catch,但是一定要有返回值return,返回值类型是Optional。

public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
String value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(value);
map.put("time",value); //原来的实现方法是
String timeValue = "";
if(map.get("time") != null){
try {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(map.get("time").toString().trim());
timeValue = new SimpleDateFormat("yyyy年MM月dd日").format(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
System.out.println(timeValue); //使用Java8的实现方法是
String timeValue2 = Optional.ofNullable(map.get("time"))
.flatMap(value2 -> {
String ans = "";
try {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value2.toString().trim());
ans = new SimpleDateFormat("yyyy年MM月dd日").format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return Optional.of(ans);
}) .orElse("");
System.out.println(timeValue2);
}

上诉方法中, 可以把flatMap改成map,但是返回值的类型就不能是Optional了。应该是返回的值会自动被包装成Optional的。

//使用Java8的实现方法是
String timeValue2 = Optional.ofNullable(map.get("time"))
.map(value2 -> {
String ans = "";
try {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value2.toString().trim());
ans = new SimpleDateFormat("yyyy年MM月dd日").format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return ans;
}) .orElse("");
System.out.println(timeValue2);

这样看起来,使用lambda表达式,代码并没有优化多少啊?

应该是没有了null的判断,人们似乎很在意这个代码中不能有null这个词的说。

如果最后改成finally块,IDEA会出现警告,虽然结果没问题。这是因为finally块中最好不能有返回值。

Reports finally blocks which can not complete normally.

Java8的flatMap如何处理有异常的函数的更多相关文章

  1. 开始Java8之旅(四) --四大函数接口

    前言   Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词   在学习 ...

  2. 如何处理Express异常?

    译者按:根据墨菲定律:“有可能出错的事情,就会出错”.那么,既然代码必然会出错,我们就应该处理好异常. 原文: How to handle errors in Express 译者:Fundebug ...

  3. java8 map flatmap

    map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素.这个方法有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和ma ...

  4. Windows异常分发函数---KiUserExceptionDispatcher

    简介 KiUserExceptionDispatcher 是SEH分发器的用户模式的负责函数.当一个异常发生的时候,该异常将生成一个异常事件,内核检查该异常是否是由于执行用户模式代码导致的.如果是这样 ...

  5. 20190901 On Java8 第十五章 异常

    第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pasc ...

  6. Workflow_如何处理标准异常和自定义异常(案例)

    2014-05-31 Created By BaoXinjian

  7. C++如何处理内联虚函数

    http://blog.csdn.net/hedylin/article/details/1775556 当一个函数是内联和虚函数时,会发生代码替换或使用虚表调用吗? 为了弄清楚内联和虚函数,让我们将 ...

  8. 安装Java8以后,Eclipse运行异常解决方案

    再输入cmd,java后提示运行环境配置中,安装的是jdk1.7,但要求是jdk1.8,也就是说Java8. 网上删除注册表,下载彻底清除软件均不能解决问题的,请按照下边提示完成操作即可. 1.在文件 ...

  9. java8的捕获多个异常的一个写法

    这是按intellij idea的提示知道的, 可以写成 catch(xxxException | yyyException | zzzException e){ } 这样的形式,对几个不同的异常使用 ...

随机推荐

  1. [10] AOP的注解配置

    1.关于配置文件 首先在因为要使用到扫描功能,所以xml的头文件中除了引入bean和aop之外,还要引入context才行: <?xml version="1.0" enco ...

  2. odoo 11导入外部数据过程记录

    在开发过程中,遇见需要将SQL Server中的数据转移到Pg数据库的情况,那么如何做才能解决这一问题呢? 1.自己写代码,将数据从SQL Server到PG. 2.利用odoo自带的导入功能导入. ...

  3. Bash Shebang 小结

    在 shell(Bash 是一种 shell) 中执行外部程序和脚本时,Linux 内核会启动一个新的进程,以便在新的进程中执行指定的程序或脚本.内核知道该如何为编译型的程序做这件事,但是对于脚本程序 ...

  4. open-falcon ---客户机agent操作

    open-falcon的agent用于采集机器负载监控指标,比如cpu.idle.load.1min.disk.io.util等等,每隔60秒push给Transfer.agent与Transfer建 ...

  5. Centos下堡垒机Jumpserver V3.0环境部署完整记录(2)-配置篇

    前面已经介绍了Jumpserver V3.0的安装,基于这篇安装文档,下面说下Jumpserver安装后的的功能使用: 一.jumpserver的启动 Jumpserver的启动和重启 [root@t ...

  6. Hybrid APP基础篇(一)->什么是Hybrid App

    最新更新 一个开源的快速混合开发框架:https://github.com/quickhybrid/quickhybrid Android.iOS.JS三端内容初步都已经完成,有完善的设计思路.教程以 ...

  7. VS2013安装和单元测试

    1. VC2013安装过程及使用感受 刚上大一的时候老师推荐我们用VC++6.0.当时也就听了老师的话用VC++6.0编程了一段时间.后来上了大二买了电脑VC++6.0支持不了WIN8.1所以我就开始 ...

  8. Record for Individual Project ( Word frequency program )

    1.  预计时间 ● 对问题总体的理解.规划:10 min ● 设计编写程序:5 h ● 调试: 分模块-40 min; 总体-40min ● 测试(性能分析).改进:1 h 2.  实际用时 ● 对 ...

  9. 期末总结:LINUX内核分析与设计期末总结

    朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...

  10. Linux内核期末总结

    20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 第一周 http://www.cn ...