1.定義:
Optional是Java8提供的爲了解決null安全問題的一個API。減少了我們進行判斷空的程序.
2.相關的方法:
Modifier and Type | Method and Description |
---|---|
static <T> Optional<T> |
empty()
返回一個空 |
boolean |
equals(Object obj)
指示是否有其他對象“等於”此選項。 |
Optional<T> |
filter(Predicate<? super T> predicate)
如果一個值是存在的,而價值匹配給定謂詞,返回一個 |
<U> Optional<U> |
flatMap(Function<? super T,Optional<U>> mapper)
如果一個值是存在的,將提供 |
T |
get()
如果一個值是在這 |
int |
hashCode()
返回當前值的哈希代碼值,如果有的話,或0(0),如果沒有價值。 |
void |
ifPresent(Consumer<? super T> consumer)
如果一個值存在,調用指定的值的指定的用戶,否則什麼都不做。 |
boolean |
isPresent()
返回 |
<U> Optional<U> |
map(Function<? super T,? extends U> mapper)
如果一個值是存在的,申請提供的映射函數,如果結果不爲空,返回一個 |
static <T> Optional<T> |
of(T value)
返回與指定非空值的 |
static <T> Optional<T> |
ofNullable(T value)
返回一個 |
T |
orElse(T other)
如果目前的返回值,否則返回 |
T |
orElseGet(Supplier<? extends T> other)
如果目前的返回值,否則調用 |
<X extends Throwable> |
orElseThrow(Supplier<? extends X> exceptionSupplier)
返回所包含的值,如果存在的話,否則拋出一個由提供的供應商創建的異常。 |
String |
toString()
返回此可選適用於調試的非空字符串表示形式。 |
3.相關的案例
3.1創建一個空的Optional.
//1.創建空的optional
Optionaloptional=Optional.empty();
//Optional.empty
System.out.println("1.創建空的optional:\n"+optional.get());
//使用get方法進行輸出爲NoSuchElementException
3.2使用Optional的of() 方法
先創建一個對象類Optiona_User.java
importlombok.AllArgsConstructor;
importlombok.Data;
@Data
@AllArgsConstructor
publicclassOptional_User{
privateintuid;
privateStringname;
privateintage;
}
測試調用及結果
demo02(user);//正常輸出user
demo02(null);//NullPointerException
3.3使用Optional的ofNullable()方法進行測試
public static void demo03(Optional_User user){
Optional<Optional_User> userB = Optional.ofNullable(user);
System.out.println("3.使用optional.ofNullable()->:\n"+userB.get());
}
測試調用及結果
public static void demo03(Optional_User user){
Optional<Optional_User> userB = Optional.ofNullable(user);
System.out.println("3.使用optional.ofNullable()->:\n"+userB.get());
}
3.4 使用ifPresent()檢查是否含有值
public static void demo04(Optional_User user) {
Optional<Optional_User> userC = Optional.ofNullable(user);
System.out.println(userC.isPresent());
}
測試結果:
//4.demo04 是判斷是否爲空
demo04(user);//true
demo04(null);//false
3.5使用OrElse(other) 進行替換空值,使用orElseGet(()->other)效果一樣
public static void demo05(Optional_User user) {
Optional_User user2 = new Optional_User(1,"superl2",22);
Optional_User userD = Optional.ofNullable(user).orElse(user2);
System.out.println("5.1使用orElse(other)->:\n"+userD);
//相當於
Optional_User userD_1 = Optional.ofNullable(user).orElseGet(() -> user2);
System.out.println("5.2 相當於使用orElseGet(()-> other)->:\n"+userD_1);
}
測試結果:
//5.demo05 使用orElse()的方法進行替換null值
demo05(user);//打印出user
demo05(null);//打印user2