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 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.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java map是大括号_Java8如何基于flatMap处理异常函数相关推荐

  1. 【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度...

    代码处理逻辑: 代码流程: 1.首先需要创建一个实体 用来存储 相关信息 1 package com.sxd.test.unusualName; 2 3 public class NameEntity ...

  2. BAT Java面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!

    JavaList面试题汇总 1.List集合:ArrayList.LinkedList.Vector等. 2.Vector是List接口下线程安全的集合. 3.List是有序的. 4.ArrayLis ...

  3. Java Map中那些巧妙的设计

    简介: 他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践.然而,大多数有关Java Map原理的科普类文章都是专注于"点",并没有连成"线", ...

  4. java map转string_【库学科技】32道常见的Java基础面试题

    内容来源于图灵 侵删. 什么是 Java 虚拟机(JVM)?为什么 Java 被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Jav ...

  5. ​Java Map中那些巧妙的设计

    最近拜读了一些Java Map的相关源码,不得不惊叹于JDK开发者们的鬼斧神工.他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践.然而,大多数有关Java Map原理的科普类文章都是 ...

  6. Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包

    在上篇文章中Java抓包分析三(基于jnetpcap进行抓包)--抓取Http请求数据包,我们讲解了TCP三次握手的过程和如何抓取Http数据包,但是我们并没有进行一个数据分析,接下来这篇文章我们将要 ...

  7. java map集合的等号改为逗号_老司机用一篇博客带你快速熟悉Dart语法

    [前言]Dart语言是使用flutter框架开发时候必备的语言,flutter是一个跨平台的框架,一套代码就可以完美实现安卓和ios两个平台,适配也很不错,Dart语言很友好,和java很类似,学习成 ...

  8. Java Map集合的详解

    参考自:Java Map集合的详解 (略有修改) 一,Map 如果程序中存储了几百万个学生,而且经常需要使用学号来搜索某个学生,那么这个需求有效的数据结构就是Map. Map是一种依照键(key)存储 ...

  9. 微信公众号-java上传图片素材到微信服务器基于事件推送两条消息

    微信公众号-java上传图片素材到微信服务器&基于事件推送两条消息 场景:基于微信扫码登录/关注事件,向用户推送两条消息. 分析:翻阅了微信开发者文档和一些其他资料发现,公众号针对用户关注/扫 ...

最新文章

  1. 论文推荐 | 目标检测中不平衡问题算法综述
  2. 快速指南:在DevOps中实现持续交付
  3. 递归查询mysql数据库设计
  4. 关于Android中工作者线程的思考
  5. linux 虚拟机挂载本地,CentOS 在VMWare中挂载本地yum源
  6. winCE下Unicode编码
  7. Ⅴ0还有别的方法设置图案吗_定制汽车硅胶按键你知道厂家是怎么给汽车按键镭雕的吗...
  8. 若依如何去掉“正在加载系统资源,请耐心等待”
  9. Android Lint 检查规则的定制(基本篇)
  10. YTU 2837: 编程题B-狐狸算卦
  11. 基于RabbitMQ RPC实现的主机异步管理
  12. Deadline调度器之(二):细节和使用方法
  13. mysql 分隔字符串的函数_Mysql 字符串分隔函数
  14. 态势感知平台分析流程
  15. x86_64-w64-mingw32/bin/ld.exe: cannot find -lmsvcrt
  16. 解决WIN10家庭版无法远程桌面连接的问题
  17. 基于Java语言实现全国交通咨询模拟
  18. 这就是数学的魅力?QWQ
  19. LOJ3124 CTS2019 氪金手游 概率、容斥、树形DP
  20. C语言学习2:Hello World!详解

热门文章

  1. 那个悲伤的朋友,去了一趟菜场竟然活过来了
  2. 【转载保存】RunTime.getRunTime().addShutdownHook 添加钩子
  3. 判断子字符串是否出现在主字符串内
  4. 机器学习——决策树的实现
  5. LPTSTR、LPCSTR、LPCTSTR、LPSTR的区别
  6. spark异常 - Null value appeared in non-nullable field
  7. 一线技术人的成长思考总结
  8. 各位 PHPer,Serverless 正当时
  9. 阿里云边缘云ENS再升级 四大场景应用加速产业数字化落地
  10. MYSQL深潜 - 剖析Performance Schema内存管理