JAVA8 Optional新特性和使用详解
生活随笔
收集整理的這篇文章主要介紹了
JAVA8 Optional新特性和使用详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、Optional簡介
- 二、應用Optional
- 1、創建Optional對象
- 2、Optional中map用法
- 3、Optional其它方法用法
- 三、Optional實戰
- 1、創建Optional實例
- 2、默認值
前言:在介紹Optional之前我們先回顧Stream流中兩個方法map和flatMap區別。
例:
運行結果:
[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之前我們需要這些做。
例:
但是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新特性和使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并行数据处理与性能详解与ForkJoin
- 下一篇: OAuth 2.0 简介