Java8的flatMap如何处理有异常的函数
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如何处理有异常的函数的更多相关文章
- 开始Java8之旅(四) --四大函数接口
前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习 ...
- 如何处理Express异常?
译者按:根据墨菲定律:“有可能出错的事情,就会出错”.那么,既然代码必然会出错,我们就应该处理好异常. 原文: How to handle errors in Express 译者:Fundebug ...
- java8 map flatmap
map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素.这个方法有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和ma ...
- Windows异常分发函数---KiUserExceptionDispatcher
简介 KiUserExceptionDispatcher 是SEH分发器的用户模式的负责函数.当一个异常发生的时候,该异常将生成一个异常事件,内核检查该异常是否是由于执行用户模式代码导致的.如果是这样 ...
- 20190901 On Java8 第十五章 异常
第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pasc ...
- Workflow_如何处理标准异常和自定义异常(案例)
2014-05-31 Created By BaoXinjian
- C++如何处理内联虚函数
http://blog.csdn.net/hedylin/article/details/1775556 当一个函数是内联和虚函数时,会发生代码替换或使用虚表调用吗? 为了弄清楚内联和虚函数,让我们将 ...
- 安装Java8以后,Eclipse运行异常解决方案
再输入cmd,java后提示运行环境配置中,安装的是jdk1.7,但要求是jdk1.8,也就是说Java8. 网上删除注册表,下载彻底清除软件均不能解决问题的,请按照下边提示完成操作即可. 1.在文件 ...
- java8的捕获多个异常的一个写法
这是按intellij idea的提示知道的, 可以写成 catch(xxxException | yyyException | zzzException e){ } 这样的形式,对几个不同的异常使用 ...
随机推荐
- Attention[Content]
0. 引言 神经网络中的注意机制就是参考人类的视觉注意机制原理.即人眼在聚焦视野区域中某个小区域时,会投入更多的注意力到这个区域,即以"高分辨率"聚焦于图像的某个区域,同时以&qu ...
- Spring Boot 之订制 logo
Spring Boot 之订制 logo 简介 变量 配置 编程 源码 引申和引用 Spring Boot 启动时默认会显示以下 logo: . ____ _ __ _ _ /\\ / ___'_ _ ...
- Struts学习总结-02 上传文件
Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的目录,以确保数据不丢失. ...
- Linux查看特定端口是否被占用并kill掉相关进程
今天在搭建Zookeeper集群的时候,需要频繁启动zookeeper,但是启动的时候,有时会提示下列错误信息: zookeeper需要的地址已经被占用了,其实是因为上一次的zookeeper没有关闭 ...
- 数组排列组合问题——BACKTRACKING
BACKTRACKING backtracking(回溯法)是一类递归算法,通常用于解决某类问题:要求找出答案空间中符合某种特定要求的答案,比如eight queens puzzle(将国际象棋的八个 ...
- .NetCore实践篇:分布式监控系统zipkin踩坑之路(二)
前言 <牧神记>有一句话说的好,破心中神.当不再对分布式,微服务,CLR畏惧迷茫的时候,你就破了心中神. zipkin复习 第一篇: .Net架构篇:思考如何设计一款实用的分布式监控系统? ...
- 【课程总结】Linux内核分析课程总结
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 每周实验报告: 反汇编一个简单的C程序 ...
- javac编译提示错误需要为 class、interface 或 enum
HelloWorld.java:1: 需要为 class.interface 或 enum锘缝ublic class HelloWorld{^1 错误 这个错误出现的原因主要是在中文操作系统中,使用一 ...
- PAT 甲级 1134 Vertex Cover
https://pintia.cn/problem-sets/994805342720868352/problems/994805346428633088 A vertex cover of a gr ...
- NodeJS简记
C:\Users\Administrator>node > .help .break Sometimes you get stuck, this gets you out .clear A ...