Java8-Optional

1.定義:

Optional是Java8提供的爲了解決null安全問題的一個API。減少了我們進行判斷空的程序.

2.相關的方法:

Modifier and Type Method and Description
static <T> Optional<T> empty()

返回一個空 Optional實例。

boolean equals(Object obj)

指示是否有其他對象“等於”此選項。

Optional<T> filter(Predicate<? super T> predicate)

如果一個值是存在的,而價值匹配給定謂詞,返回一個 Optional描述值,否則返回一個空 Optional

<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)

如果一個值是存在的,將提供 Optional-bearing映射函數,返回結果,否則返回一個空 Optional

T get()

如果一個值是在這 Optional,返回值,否則將 NoSuchElementException

int hashCode()

返回當前值的哈希代碼值,如果有的話,或0(0),如果沒有價值。

void ifPresent(Consumer<? super T> consumer)

如果一個值存在,調用指定的值的指定的用戶,否則什麼都不做。

boolean isPresent()

返回 true如果有存在價值,否則 false

<U> Optional<U> map(Function<? super T,? extends U> mapper)

如果一個值是存在的,申請提供的映射函數,如果結果不爲空,返回一個 Optional描述結果。

static <T> Optional<T> of(T value)

返回與指定非空值的 Optional目前。

static <T> Optional<T> ofNullable(T value)

返回一個 Optional描述指定的值,如果非零,則返回一個空 Optional

T orElse(T other)

如果目前的返回值,否則返回 other

T orElseGet(Supplier<? extends T> other)

如果目前的返回值,否則調用 other並返回調用結果的。

<X extends Throwable>
T
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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章