Java8如何基于flatMap处理异常函数

 更新时间:2020年09月29日 11:35:11   作者:贾树丙  
这篇文章主要介绍了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.

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

相关文章

  • Mybatis自定义拦截器实现权限功能

    Mybatis自定义拦截器实现权限功能

    本文主要介绍了Mybatis自定义拦截器实现权限功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Java pdu短信解码全面解析

    Java pdu短信解码全面解析

    本文是根据python的方法改写的pdu短信解码,非常不错,代码简单易懂具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • springboot简单接入websocket的操作方法

    springboot简单接入websocket的操作方法

    这篇文章主要介绍了springboot简单接入websocket的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • 详解租约机制以及在hbase中的应用

    详解租约机制以及在hbase中的应用

    这篇文章主要介绍了详解租约机制以及在hbase中的应用的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java使用Unsafe类的示例详解

    Java使用Unsafe类的示例详解

    java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,这篇文章主要介绍了Java使用Unsafe类,需要的朋友可以参考下
    2021-09-09
  • java实现http请求工具类示例

    java实现http请求工具类示例

    这篇文章主要介绍了java实现http请求工具类示例,需要的朋友可以参考下
    2014-05-05
  • ES修改字段类型的操作方式

    ES修改字段类型的操作方式

    ES修改字段类型是指在已有的索引中,通过特定的操作方式将某个字段的类型修改为其它类型,这篇文章主要介绍了ES修改字段类型的相关知识,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • poi导出word表格的操作讲解

    poi导出word表格的操作讲解

    这篇文章主要介绍了poi导出word表格的操作讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • SpringBoot+mybatis+Vue实现前后端分离项目的示例

    SpringBoot+mybatis+Vue实现前后端分离项目的示例

    本文主要介绍了SpringBoot+mybatis+Vue实现前后端分离项目的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • java结合keytool如何实现非对称加密与解密详解

    java结合keytool如何实现非对称加密与解密详解

    这篇文章主要给大家介绍了关于java结合keytool如何实现非对称加密与解密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友下面随着小编来一起学习学习吧
    2018-08-08

最新评论