日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA8 Optional新特性和使用详解

發布時間:2025/1/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA8 Optional新特性和使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、Optional簡介
    • 二、應用Optional
      • 1、創建Optional對象
      • 2、Optional中map用法
      • 3、Optional其它方法用法
    • 三、Optional實戰
      • 1、創建Optional實例
      • 2、默認值

前言:在介紹Optional之前我們先回顧Stream流中兩個方法map和flatMap區別。

  • map只是一維 1對1 的映射
  • 而flatmap可以將一個2維的集合映射成一個一維,相當于他映射的深度比map深了一層。說的專業點就是,各個流會被合并或者扁平化為一個單一的流。
    例:
  • public static void mapAndFlatMap() {String[] array = {"HELLO","WORLD"};Stream<String> stream = Arrays.stream(array);List<String> collect = stream.map(s -> s.split("")).flatMap(Arrays::stream).collect(toList());System.out.println(collect);stream = Arrays.stream(array);List<Stream<String>> collect1 = stream.map(s -> s.split("")).map(Arrays::stream).collect(toList());System.out.println(collect1);}

    運行結果:

    [H, E, L, L, O, W, O, R, L, D] [java.util.stream.ReferencePipeline$Head@1218025c, java.util.stream.ReferencePipeline$Head@816f27d]

    一、Optional簡介

    作為java程序員,相信大家都遇到過NullPointerException這個異常。這個空指針的由來是,1965年,英國一位計算機科學家Horae提出來的,設計初衷是通過編譯器的自動檢測機制,確保所有使用和引用方法
    都是絕對安全。
    在java8汲取了Haskell和Scala的靈感,引入了一個新類Optional。變量存在時Optional只是對類簡單封裝,變量不存在時會被建模成空的Optional對象,由方法Optional.empty()返回。

    二、應用Optional

    在使用之前我們先學習如果創建Optional對象。

    1、創建Optional對象

    • 創建空的Optional對象
      Optional optCar = Optional.empty();
    • 創建非空Optional對象
      Optional optCar = Optional.of(obj);
    • 可接受null的Optional對象
      Optional optCar = Optional.ofNullable(obj);

    2、Optional中map用法

    從對象種提取信息java8之前我們需要這些做。
    例:

    String name = null; if(obj != null) {name = obj.getName(); }

    但是java8之后我可以用一行代碼來完成。

    Optional<Object> optObj = Optional.ofNullable(obj); Optional<String> name = optInsurance.map(Object::getName);

    3、Optional其它方法用法

    Optional類中還有許多其它方法,我們對它進行分類和概括,幫助大家加深印象。

    方法描述
    empty返回一個空的Optional實例
    filter如果只存在并且滿足提供的謂詞,就返回包含該值的Optional對象,否則返回一個空的Optional對象
    flatMap如果只存在,就對該值執行提供的mapping函數,返回一個Optional類型的值,否則返回一個空的Optional對象
    get如果該值存在,將該值用Optional封裝返回,否則拋出一個NoSuchElementException異常
    ifPresent如果值存在,就返回使用該值的方法調用,否則什么也不做
    isPresent如果值存在就返回true,否則返回false
    map如果只存在,就對該值執行提供的mapping函數
    of將執行值用Optional封裝返回,如果該值是null,則拋出NullPointerException異常
    ofNullable將執行值用Optional封裝返回,如果該值是null,則返回一個空的Optional對象
    orElse如果有值則將其返回,否則返回一個默認值
    orElseGet如果有值則將其返回,否則返回一個指定的Supplier接口生成的值
    orElse如果有值則將其返回,否拋出一個指定的Supplier接口生成的異常

    三、Optional實戰

    1、創建Optional實例

    Optional<Dish> dish1 = Optional.of(dish);Optional<Dish> dish2 = Optional.ofNullable(dish);

    2、默認值

    Optional<Dish> dish1 = Optional.of(dish).orElse(new Dish());

    綜上所知,如果我們想要使用Optional的強大功能,可以封裝一個工具類OptionalUtil更好的優化我們的代碼。

    總結

    以上是生活随笔為你收集整理的JAVA8 Optional新特性和使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。