3.1 创建Optinoal
-
创建一个空的Optional Optional
empty = Optional.empty(); -
创建一个非空的Optional ,如果of参数为null则抛出空指针异常
String str1 = "";
OptionalstrOptional = Optional.of(str1); -
创建一个可以为空的Optional
String str1 = null;
OptionalstrOptional = Optional.ofNullable(str1); -
optional.filter(Predicate<? super
predicate)接口实现类返回true,返回this,否则或者optional对象是空 则返回 Optional.empty(); JSONObject jsonObject = new JSONObject();
JSONObject invoiceStatus = new JSONObject();
invoiceStatus.put("sdf","sdf");
jsonObject.put("invoiceStatus",invoiceStatus);
OptionalinvoiceStatusJson = Optional.ofNullable(jsonObject.getJSONObject("invoiceStatus"));
Optionaloptional = invoiceStatusJson.filter(json -> json.getString("sdf") != null);
// 源码
public Optionalfilter(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent())
return this;
else
return predicate.test(value) ? this : empty();
} -
map(Function<? super T,? extends U> mapper)&&flatMap(Function<? super T,Optional> mapper)这两个方法很类似,都是返回一个optional,前者自动,后置需要手动创建一个
Optional
sdk = invoiceStatusJson.flatMap(json -> Optional.ofNullable(json.getString("sdk")));
// 源码
public Optional flatMap(Function<? super T, Optional> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));
}
}Optional
sdk = invoiceStatusJson.map(json -> json.getString("sdk"));
// 源码
public Optional map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
3.2 取optional对象里面的值
-
get() 如果optional有值则返回,没有抛出异常java.util.NoSuchElementException.
-
orElse(T other) 如果optional有值则返回,没有返回other
-
orElseGet(Supplier<? extends T> other) 如果optional有值则返回,没有返回Supplier函数接口实现类的get方法返回值
-
orElseThrow(Supplier<? extends X> exceptionSupplier) 如果有值返回,没有值抛出Supplier函数接口实现类的get方法返回的值,这个值是Throwable子类
invoiceStatusJson.orElseThrow(() -> new NullPointerException("sd"));
// 源码
publicT orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
3.3 判断optional里的值
-
isPresent() 有值返回true
//源码
public boolean isPresent() {
return value != null;
} -
ifPresent 有值执行Consumer接口的实现类
// 源码
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}