码迷,mamicode.com
首页 > 编程语言 > 详细

Java8的flatMap如何处理有异常的函数

时间:2017-09-06 18:23:53      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:null   size   函数返回   需要   val   style   函数   ash   print   

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.

 

Java8的flatMap如何处理有异常的函数

标签:null   size   函数返回   需要   val   style   函数   ash   print   

原文地址:http://www.cnblogs.com/acm-bingzi/p/javaFlatMap.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!