欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java8如何基于flatMap處理異常函數(shù)

 更新時(shí)間:2020年09月29日 11:35:11   作者:賈樹丙  
這篇文章主要介紹了Java8如何基于flatMap處理異常函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Java8的flatMap函數(shù),作用是:如果有值,為其執(zhí)行mapping函數(shù)返回Optional類型返回值,否則返回空Optional。

見到的映射函數(shù)往往都只有一句話,連大括號(hào)都不需要加的,如下:

String personValue = Optional.ofNullable(map.get("person"))
    .flatMap(value -> Optional.of(value.toString().trim()))
    .orElse("");

可是如果映射函數(shù)里,可能會(huì)拋出異常,該怎么辦?

方法也是使用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);

  //原來的實(shí)現(xiàn)方法是
  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的實(shí)現(xiàn)方法是
  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了。應(yīng)該是返回的值會(huì)自動(dòng)被包裝成Optional的。

//使用Java8的實(shí)現(xiàn)方法是
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表達(dá)式,代碼并沒有優(yōu)化多少啊?

應(yīng)該是沒有了null的判斷,人們似乎很在意這個(gè)代碼中不能有null這個(gè)詞的說。

如果最后改成finally塊,IDEA會(huì)出現(xiàn)警告,雖然結(jié)果沒問題。這是因?yàn)閒inally塊中最好不能有返回值。

Reports finally blocks which can not complete normally.

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring循環(huán)依賴實(shí)現(xiàn)過程揭秘

    Spring循環(huán)依賴實(shí)現(xiàn)過程揭秘

    這篇文章主要介紹了Spring循環(huán)依賴實(shí)現(xiàn)過程,Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對(duì)象的創(chuàng)建過程和依賴注入的方式
    2023-01-01
  • Spring中基于XML的面向切面編程(AOP)詳解

    Spring中基于XML的面向切面編程(AOP)詳解

    這篇文章主要詳細(xì)介紹了Spring中基于XML的面向切面編程(AOP),文中通過代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • Spring JDBCTemplate原理及使用實(shí)例

    Spring JDBCTemplate原理及使用實(shí)例

    這篇文章主要介紹了Spring JDBCTemplate原理及使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • seata的部署和集成詳細(xì)介紹

    seata的部署和集成詳細(xì)介紹

    這篇文章主要介紹了Java seata的部署和集成,文章中有詳細(xì)的代碼示例和圖片講解,對(duì)學(xué)習(xí)seata有一定的參考價(jià)值,需要的朋友可以參考一下
    2023-04-04
  • JDK1.8安裝與配置超詳細(xì)教程

    JDK1.8安裝與配置超詳細(xì)教程

    JDK1.8即為JDK8,JDK8是目前是最成熟最穩(wěn)定的版本,本文將詳細(xì)介紹JDK1.8的安裝與配置,需要的朋友可以參考下
    2023-03-03
  • springMVC的生命周期詳解

    springMVC的生命周期詳解

    本篇文章主要介紹了springMVC的生命周期詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java泛型<T> T與T的使用方法詳解

    Java泛型<T> T與T的使用方法詳解

    這篇文章主要介紹了Java泛型<T> T與T的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Springboot詳解RocketMQ實(shí)現(xiàn)廣播消息流程

    Springboot詳解RocketMQ實(shí)現(xiàn)廣播消息流程

    RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)廣播消息
    2022-06-06
  • JavaMail入門教程之接收郵件(4)

    JavaMail入門教程之接收郵件(4)

    這篇文章主要為大家詳細(xì)介紹了JavaMail入門教程之接收郵件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java控制臺(tái)實(shí)現(xiàn)猜拳游戲

    Java控制臺(tái)實(shí)現(xiàn)猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了Java控制臺(tái)實(shí)現(xiàn)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評(píng)論