Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
参考文章:Java 8 Optional 类
public class Demo_Optional {
public static void main(String[] args) {
filter();
}
static void filter() {
Optional<String> strOpt = Optional.of("Hello World!!!");
Optional<String> strOptional = strOpt.filter(str -> str.contains("He"));
System.out.println(strOptional.get());
}
static void of() {
Optional<String> strOpt = Optional.of("Hello World!!!");
String result = orElse(strOpt);
System.out.println("of():" + result);
}
static void empty() {
Optional<String> strOpt = Optional.empty();
String result = orElse(strOpt);
System.out.println("empty():" + result);
}
static String orElse(Optional<String> strObj) {
boolean result = Optional.ofNullable(strObj).isPresent();
System.out.println(result);
return strObj.orElse("Hello World");
}
}
注意: isPresent()方法,当其中的数据集合为[]时,返回的结果为true,如:optional<List>当值为:optional[[ ]]时,执行isPresent()方法判断时,返回结果为true。
关于T orElse(T other)、T orElseGet(Supplier<? extends T> other)和 T orElseThrow(Supplier<? extends X> exceptionSupplier)使用:
1、T orElse(T other)
// 如果存在该值,返回值, 否则返回 other
2、T orElseGet(Supplier<? extends T> other)
// 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果;使用如下:
optional.orElseGet(()->function());// optional中如果存在值,返回该值;如果不存在则触发function(),返回function()的结果。
3、<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
// 如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常;使用如下:
optional.orElseThrow(()->new Exception());
Supplier是一个函数式的接口,java8的新特性;核心方法get(),返回一个定义的对象。