JDK8新特性-Optional使用总结

为什么jdk8中加入了Optional

使用过java判断NPE(空指针异常)问题的小伙伴,一定知道判空的代码写起来一点都不优雅并且会出现运行时期经常会出现NPE。Optional自带判空函数,是代码更加整洁和优雅。

构造方法

源码
  1. static Optional empty()
    描述:返回空的 Optional 实例
    使用场景:内部value是null。
  public static Optional empty() {
        @SuppressWarnings("unchecked")
        Optional t = (Optional) EMPTY;
        return t;
    }
  1. static Optional of(T value)
    描述:返回一个指定非null值的Optional。
    使用场景:明确知道入参value不为空,或者允许运行时抛出NPE异常。
  public static  Optional of(T value) {
        return new Optional<>(value);
    }
  1. static Optional ofNullable(T value)
    描述:如果为非空,返回 Optional描述的指定值,否则返回空的 Optional。
    使用场景:value==null 就得到 Optional.empty(), 非 null 就调用 Optional.of(value)。
public static  Optional ofNullable(T value) {
        return value == null ? empty() : of(value);
    }

常用方法

不为空则返回对象
  • T orElse(T other) 如果存在该值,返回值, 否则返回 other。
  • T orElseGet(Supplier other) 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
  • T orElseThrow(Supplier exceptionSupplier) 如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常。
不为空则执行动作
  • void ifPresent(Consumer consumer) 如果值存在则使用该值调用 consumer ,否则不做任何事情。
  • Optional map(Function mapper)
    如果有值,则对其执行调用映射函数得到返回值。如果返回值不为 null,则创建包含映射返回值的Optional作为map方法返回值,否则返回空Optional。
  • Optional flatMap(Function> mapper)
    如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional(
    区别于Map,返回类型是Optional)
不为空则过滤
  • Optional filter(Predicate predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。
总结

Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。和lamdba表达式,新加入的supplier等接口一起使用,代码优雅简洁。

你可能感兴趣的:(JDK8,新特性实战)