一、目的:
主要用于处理null的问题,更方便快捷的使用链式编程
1.java8之前:
public static String getChampionName(Competition comp){
if(comp != null){
CompResult result = comp.getResult();
if(result != null){
User champion = result.getChampion();
if(champion != null){
return champion.getName();
}
}
}
throw new IllegalArgumentException("The value of param comp isn't available.");
}
2.java8之后:
public static String getChampionName(Competition comp){
return Optional.ofNullable(comp)
.map(c -> c.getResult())
.map(r -> c.getChampion())
.map(u -> c.getName())
.orElseThrow(() -> new IllegalArgumentException("The value of param comp isn't available."));
}
二、Optional内部方法:
Optional.empty()://明确的 为null。
Optional.of(obj): //它要求传入的 obj 不能是 null 值的, 否则还没开始进入角色就倒在了 NullPointerException 异常上了.
Optional.ofNullable(obj): //它以一种智能的, 宽容的方式来构造一个 Optional 实例. 来者不拒, 传 null 进到就得到 Optional.empty(), 非 null 就调用 Optional.of(obj).
public<U> Optional<U> map(Function<? super T, ? extends U> mapper)
public T orElse(T other)
public T orElseGet(Supplier<? extends T> other)
public void ifPresent(Consumer<? super T> consumer)
public Optional<T> filter(Predicate<? super T> predicate)
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X