Java 8 引入的 Optional 類,主要解決的問題是空指針異常(NullPointerException)
返回值/修飾符 | 方法 | 詳細 |
---|---|---|
static Optional | empty() 返回一個空的 Optional實例。 | Optional<String> stringOptional = Optional.empty(); |
boolean | equals(Object obj) 判斷對象是否相等 | Optional<UserInfo> stringOptional1 = Optional.of(user); Optional<UserInfo> stringOptional2 = Optional.of(user); boolean equals = stringOptional1.equals(stringOptional2); |
Optional | filter(Predicate<? super T> predicate) 根據條件篩選 | UserDto user=new UserDto(); user.setKeyword(“asd”); Optional<UserDto> optionalUserDto = Optional.of(user).filter(u->u.getKeyword().equals(“asd”)); 符合條件的話,就把值賦給optionalUserDto |
Optional | flatMap(Function<? super T,Optional> mapper) 如果一個值存在,應用提供的 Optional映射函數給它,返回該結果,否則返回一個空的 Optional 。 | Optional<String> stringOptional = Optional.of(user).flatMap(u -> Optional.ofNullable(u.getKeyword())); 如果u.getKyword不為空,返回一個Optional對象 |
T | get() 如果 Optional中有一個值,返回值,否則拋出 NoSuchElementException 。 | 獲取Optional包含的對象,String str = stringOptional.get(); |
int | hashCode() 返回當前值的哈希碼值(如果有的話),如果沒有值,則返回0(零)。 | |
void | ifPresent(Consumer<? super T> consumer) 如果存在值,則使用該值調用指定的消費者,否則不執行任何操作。 | Optional<String> optionalValue = Optional.of(“Hello”); optionalValue.ifPresent(value -> { System.out.println("Value is present: " + value); // 在這里可以對 value 進行處理 }); Optional<String> emptyOptional = Optional.empty(); emptyOptional.ifPresent(value -> { // 這段代碼不會執行,因為 emptyOptional 中沒有值 System.out.println("Value is present: " + value); }); |
boolean | isPresent() 返回 true如果存在值,否則為 false 。 | Optional<String> optionalValue = Optional.of(“Hello”); //如果值存在 if(optionalValue.isPresent()) { } |
Optional | map(Function<? super T,? extends U> mapper) 如果存在一個值,則應用提供的映射函數,如果結果不為空,則返回一個 Optional結果的 Optional 。 | Optional<String> optionalValue = Optional.of(“Hello”); String abc = optionalValue.map(u -> u).orElse(“abc”); 直接返回optionalValue,如果空返回"abc" |
static Optional | of(T value) 返回具有 Optional的當前非空值的Optional。 | Optional<String> abc = Optional.of(“abc”); 返回一個字符串類型的Optional對象,如果為null報錯NullPointerException |
static Optional | ofNullable(T value) 返回一個 Optional指定值的Optional,如果為空,則返回一個空的 Optional 。 | Optional<String> abc = Optional.ofNullable(“abc”); 返回一個字符串類型的Optional對象,可以為null |
T | orElse(T other) 返回值如果存在,否則返回 other 。 | String msg=null; String str=Optional.ofNullable(msg).orElse(“abc”); 如果msg不為null,直接返回msg,否則返回"abc" |
T | orElseGet(Supplier<? extends T> other) 返回值(如果存在),否則調用 other并返回該調用的結果。 | String msg=null; String str=Optional.ofNullable(msg).orElseGet(()->“asd”); 有值的時候返回值,如果沒有值,它會執行作為參數傳入的 Supplier(供應者) 函數式接口,并將返回其執行結果: |
T | orElseThrow(Supplier<? extends X> exceptionSupplier) 返回包含的值(如果存在),否則拋出由提供的供應商創建的異常。 | String str=Optional.ofNullable(msg).orElseThrow(()->new RuntimeException(“null”)); 對象為null時拋出一個異常 |
String | toString() 返回此可選的非空字符串表示,適用于調試。 |