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,并且不建议使用finally块。

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);

    String timeValue2 = Optional.ofNullable(map.get("time"))
            .flatMap((value2) -> {
                String ans = "";
                try {
                    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(map.get("time").toString().trim());
                    ans = new SimpleDateFormat("yyyy年MM月dd日").format(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return Optional.of(ans);
            }) .orElse("");
    System.out.println(timeValue2);
}

如果最后改成finally块,IDEA会出现警告,虽然结果没问题

Reports finally blocks which can not complete normally.

时间: 2025-01-16 03:48:52

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

如何处理Java异常的两个例子?

下面有两个例子.一个是告诉我们调用方法也需要处理被调用者所抛出的异常:另一个是告诉我们父类可以被用来捕获或者处理异常. 1.调用方法必须处理被调用者所抛出的异常 下面是一个小小处理异常的程序.仅仅只是为了测试,如果在一个方法里抛出一个异常,不仅仅那个方法,而且调用该方法的所有方法必须声明或抛出该异常. public class exceptionTest { private static Exception exception; public static void main(String[]

异常和函数

#异常和函数能够很自然的一起工作.如果异常在函数内引发而不处理,就会被传播至函数调用的地方.如果异常在函数调用的地方也没有被调用,就会继续传播,一直达到主程序. #如果主程序也没有做异常处理,异常就会被Python解释器捕获,输出一个错误信息,然后退出程序. #例如: 1 2 #!/usr/bin/python3 3 #-*-coding:UTF-8-*- 4 #异常9.11_异常和函数 5 6 def division_fun(x,y): 7 return x/int(y) 8 9 def e

python 学习笔记day06-错误和异常、函数基础

错误和异常 基本概念 错误 从软件方面来说,错误是语法或是逻辑上的 - 语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译,这些错误必须在程序执行前纠正 - 逻辑错误可能是由于不完整或是不合法的输入所致,还可能十逻辑无法生成.计算,或是输出结果需要的无法执行 异常 当python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常 异常是因为程序出现了错误而在正常控制流以外采取的行为 这个行为又分为两个阶段: - 首先是引起异常发生的错误 - 然后是检

异步异常重试函数-tryCall

在spa程序中我们遇到的网络环境和传统网页程序不同,因此思维也不能喝传统页面雷同,面对不稳定的网络环境,为了不使一点网络不稳定就造成程序错误,需要引入容错能力,tryCall就是这样一个函数,在出现异常的情况下可以进行重试,重试的时间间隔和总次数可以自定义 //当fn调用发生异常后间隔interval后尝试,最多尝试n次,fn(done,fail)1 var tryCall=function (fn, interval, n) { 2 return function (done, fail) {

如何处理Express异常?

译者按:根据墨菲定律:"有可能出错的事情,就会出错".那么,既然代码必然会出错,我们就应该处理好异常. 原文: How to handle errors in Express 译者:Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 处理异常是编程非常重要的一点.我们的程序依赖于第三方服务.数据库以及我们的用户,一切都不可预料.数据库可能会宕机,第三方服务可能会崩溃,用户可能会使用错误的参数调用我们的接口. 为了处理各种复杂的情况,我们

java8 map flatmap

map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素.这个方法有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和mapToDouble.这三个方法也比较好理解,比如mapToInt就是把原始Stream转换成一个新的Stream,这个新生成的Stream中的元素都是int类型.之所以会有这样三个变种方法,可以免除自动装箱/拆箱的额外消耗: map方法示意图: flatMap:和map类似,不同的是其每个元素转换得

20190901 On Java8 第十五章 异常

第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pascal). 基本异常 异常参数 所有标准异常类都有两个构造器:一个是无参构造器:另一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器. Throwable 是异常类型的根类. 自定义异常 对异常来说,最重要的部分就是类名. 异常与记录日志 对于异常类来说,getMessage() 方法有点

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

http://blog.csdn.net/hedylin/article/details/1775556 当一个函数是内联和虚函数时,会发生代码替换或使用虚表调用吗? 为了弄清楚内联和虚函数,让我们将它们分开来考虑.通常,一个内联函数是被展开的. class CFoo { private: int val; public: int GetVal() { return val; } int SetVal(int v) { return val=v; } }; 这里,如果使用下列代码: CFoo x

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

2014-05-31 BaoXinjian In Capgemini 一.摘要 Workflow中经常需要处理异常包括标准异常和自定义异常,进行处理时需要通过wf_core这个公用包进行处理 包含以下三个部分 wf_core: 处理workflow中exception的标准包api wf_item_actvity_status:用以存放抛出的error_name, error_message, error_stack wf_resource: 存放了workflow默认自带一些异常,包含异常的描