5.Java8新特性 - Optional容器類
一.Optional簡介
Optional是一個容器類,代表一個值存在或者不存在,可以避免空指標異常
二.常用方法
//一個實體類 public class User { private String name; private int age; private String sex; public User(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public User() { } //......省略get/set方法、toString方法.... } 作者:Mr_歡先生 連結:https://www.jianshu.com/p/c57ac950b3e0 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
-
of(T t)
:建立一個Optional例項
Optional<User> optionalUser = Optional.of(new User()); User user = optionalUser.get(); System.out.println(user); //輸出:User{name='null', age=0, sex='null'}
-
empty()
:建立一個空的Optional例項
建立了一個空的optional,如果要列印optional.get()
則出現java.util.NoSuchElementException: No value present
異常
Optional<User> optional = Optional.empty();
-
ofNullable(T t)
:若t不為null,建立Optional例項,否則建立空例項。(ofNullable
是of
和empty
兩個的功能結合體)
Optional<User> optional = Optional.ofNullable(new User()); System.out.println(optional.get()); // 輸出:User{name='null', age=0, sex='null'} Optional<User> optional1 = Optional.ofNullable(null); System.out.println(optional1.get()); // 出現異常資訊:java.util.NoSuchElementException: No value present
-
isPresent
:判斷是否包含值
Optional<User> optional = Optional.ofNullable(null); if (optional.isPresent()) { System.out.println(optional.get()); } //第二種寫法 optional.ifPresent(System.out::println); //輸出:不輸出任何結果
-
orElse(T t)
:如果呼叫物件包含值,返回該值,否者返回t
Optional<User> optional = Optional.empty(); User user = optional.orElse(new User("小明", 12, "男")); System.out.println(user); // 輸出:User{name='小明', age=12, sex='男'}
-
orElseGet(Supplier s)
:如果呼叫物件包含值,返回該值,否則返回s獲取的值
Optional<User> optional = Optional.empty(); User user = optional.orElseGet(() -> new User("小黑", 8, "男")); System.out.println(user); //輸出:User{name='小黑', age=8, sex='男'}
-
map(Function f)
:如果有值對其處理,並返回處理後的Optional,否則返回Optional.empty()
Optional<User> optional = Optional.of(new User("小黑", 8, "男")); Optional<String> optionalStr = optional.map(User::getName); System.out.println(optionalStr.get()); //輸出:小黑
-
flatMap(Function mapper)
:與map類似,要求返回值必須是Optional
Optional<User> optional = Optional.of(new User("小黑", 8, "男")); Optional<String> optionalStr = optional.flatMap(item -> Optional.of(item.getName())); System.out.println(optionalStr.get()); //輸出:小黑