Java8新特性之Optional類

Java8對null有更優雅的處理方式Optional類。html

Opthonal類結構

生成Optional對象

  • Optional.empty
Optional<Object> empty = Optional.empty();

EMPTY持有某個類型的空值結構,調用empty()返回的便是該實例java

  • Optional.ofapp

    仍是返回空指針異常,不常用函數

  • Optional.ofNullable指針

    爲空,返回empty對象code

爲空處理

user = Optional.ofNullable(user).orElse(createUser());
    user = Optional.ofNullable(user).orElseGet(() -> createUser());
  • orElse(T other)

    當other不爲空時,依然會執行括號中的代碼htm

  • orElseGet(Supplier<? extends T> other)

    rElseGet函數並不會執行createUser()方法對象

  • orElseThrow(Supplier<? extends X> exceptionSupplier)

    value值爲null時,直接拋一個異常出去blog

流處理

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

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

這兩個函數,在函數體上沒什麼區別。惟一區別的就是入參,map函數所接受的入參類型爲Function<? super T, ? extends U>,而flapMap的入參類型爲Function<? super T, Optional<U>>。ci

在具體用法上,對於map而言: 若是User結構是下面這樣的

public class User {
    private String name;
    public String getName() {
        return name;
    }
}

這時候取name的寫法以下所示

String city = Optional.ofNullable(user).map(u-> u.getName()).get();

對於flatMap而言: 若是User結構是下面這樣的

public class User {
    private String name;
    public Optional<String> getName() {
        return Optional.ofNullable(name);
    }
}

這時候取name的寫法以下所示

String city = Optional.ofNullable(user).flatMap(u-> u.getName()).get();

判空處理

  • isPresent()

  • ifPresent(Consumer<? super T> consumer)

Optional.ofNullable(user).ifPresent(u->{
            // TODO: do something
        });

過濾

filter(Predicate<? super T> predicate)

Optional<User> user1 = Optional.ofNullable(user).filter(u -> u.getName().length()<6);

filter 方法接受一個 Predicate 來對 Optional 中包含的值進行過濾,若是包含的值知足條件,那麼仍是返回這個 Optional;不然返回 Optional.empty。

參考文章

https://www.cnblogs.com/rjzheng/p/9163246.html

相關文章
相關標籤/搜索