Java 9 中的ofNullable方法 | foojay
從 Java 9 開始,當我們需要操作 List 中的值時,可以將 Optional 與流一起使用。
在本次 Java 挑戰賽中,我們將探索在 Optional! 中使用流的方法!
如下執行main方法後會發生什麼?
import java.util.List; import java.util.stream.Stream; public class OfNullableChallenger { public static void main(String... args) { Soprano soprano = null; Stream.ofNullable(soprano) .filter(s -> s.guns.get(0) == null) .forEach(s -> System.out.println(s.guns.size())); } static class Soprano { List<String> guns; public Soprano(List<String> guns) { this.guns = guns; } } } A) 0 B) 輸出將為空 C) 將丟擲 java.lang.NullPointerException D) null |
我們使用的是 Java 9 中的 ofNullable 方法。使用此方法,可以在傳遞空物件時避免 NullPointerException。
現在我們來分析一下ofNullable的方法實現:
public static Stream ofNullable(T t) { return t == null ? Stream.empty() : StreamSupport.stream( new Streams.StreamBuilderImpl<>(t), false); } |
如果物件為空,則將返回 Stream.empty() ,並且如前所述將避免 NullPointerException ,因此輸出將為空。Stream 管道在此之後甚至不會繼續。
但是如果我們使用 Stream.of() 方法,例如:
Stream.of(soprano) .filter(s -> s.guns.get(0) == null) .forEach(s -> System.out.println(s.guns.size())); |
則會有一個NullPointerException,因為 Stream.of 方法不處理空物件。
相關文章
- Java中方法引用與Lambda區別 - foojayJava
- Java中Stream的teeing()方法用於處理合並兩個Collector - foojayJava
- 探討Java中的多執行緒概念 - foojayJava執行緒
- Java中的七種函式程式設計技術 - foojayJava函式程式設計
- OptionalInt為什麼沒有ofNullable()方法Null
- 如何避免Java程式碼中的空指標錯誤NullPointerException? - foojayJava指標NullException
- Java JIT與AOT效能比較 - foojayJava
- Java Stream過濾器案例解說 - FoojayJava過濾器
- Java機器學習VisRec API快速入門 - foojayJava機器學習API
- java中的方法Java
- Java JVM——9.方法區JavaJVM
- Spring Boot支援Java 16和新的Java記錄原始碼教程 | foojaySpring BootJava原始碼
- Java 中的方法引用Java
- VS Code剛剛增強Java開發功能 - foojayJava
- Java 9 Optional API 新增方法JavaAPI
- Java 實現單例模式的 9 種方法Java單例模式
- Java 9 中的 GC 調優基礎JavaGC
- Java 9中的GC調優基礎JavaGC
- Java 9中新的貨幣APIJavaAPI
- java 10的區域性變數型別推斷Var的用法 - foojayJava變數型別
- Java集合中的排序方法Java排序
- Java中的泛型方法Java泛型
- Java中的方法內聯Java
- Java中Arrays的asList()方法Java
- Java中Array的常用方法Java
- Java9新增的有趣方法InputStream.transferTo()Java
- 為 Java EE 應用提供的 9 種 Docker 方法JavaDocker
- Java和SpringBoot安全加密方式選擇哪種? - foojayJavaSpring Boot加密
- 關於Java中的equals方法Java
- Java中Map的遍歷方法Java
- Java中Object類的常用方法JavaObject
- Java中Scanner類的常用方法Java
- Java中Integer類的基本方法Java
- Java中的main()方法詳解JavaAI
- Java中的方法引用詳解Java
- Java、Rust、Go、NodeJS、TypeScript併發程式設計比較 - foojayJavaRustGoNodeJSTypeScript程式設計
- Java9新特性系列(便利的集合工廠方法)Java
- Java中parse方法,ValueOf方法,toString方法Java