java8 Optional类使用示例
NP exception是所有程序员的梦魇,为此你不得不去判断各种null的情况,是不是代码看起来很low,没关系,Optional 能让你的代码看起来高大上。
以下是所有jdk1.8中列出的所有方法:
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()
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)
T orElseThrow(Supplier<? extends X> exceptionSupplier)
<X extends Throwable>
T orElseThrow(Supplier<? extends X> exceptionSupplier)
String toString()
以上的每个方法的用法在以下代码中有明确说明及代码示例。
import java.util.Optional;
import java.util.function.Predicate;
/**
* Created by LHL on 2016/12/15.
*/
public class Demo01 {
public static void main(String[] args) {
//empty() 返回一个空的Optional
Optional empty = Optional.empty();
System.out.println(empty.isPresent());
//of 发回指定值的Optional ,指定的不可以为空,否则NullPointerException
//Optional of = Optional.of(null);//注意:NullPointerException
Optional of1 = Optional.of("of");
System.out.println(of1.get());
//ofNullable 可以说是of方法升级版,可以为空,也可以不为空
Optional<String> optional = Optional.ofNullable("ofnullabel");
System.out.println(optional.get());
//get 从optional中取值,如果存在,则返回取到的值,否则NoSuchElementException
//isPresent optional存在值返回true,否则false
System.out.println(empty.isPresent());
System.out.println(of1.isPresent());
//ifPresent 故名思议,如果有值,值调用consumer,否则,不做任何操作,consumer 不做具体讲解
of1.ifPresent((a)-> System.out.println("=========>"+a));
//filter 把optional按照传入的限定条件进行过滤,如果有满足该条件的返回optional,否则返回空的optional
Predicate<String> predicate = s -> s.startsWith("o");
System.out.println(of1.filter(predicate).isPresent());//以o开头
//orElse如果有值,则将其放回,没有返回指定的值
System.out.println(empty.orElse("没有值,快把我返回吧"));
//orElseGet 和orElse功能差不多,但是接口的是一个Supplier
System.out.println(empty.orElseGet(()->"就把我返回吧"));
}
}