JDK8新特性-Optional使用总结

为什么jdk8中加入了Optional

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

构造方法
源码
  1. static Optional empty()
    描述:返回空的 Optional 实例
    使用场景:内部value是null。
  public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }
  1. static Optional of(T value)
    描述:返回一个指定非null值的Optional。
    使用场景:明确知道入参value不为空,或者允许运行时抛出NPE异常。
  public static <T> Optional<T> 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 <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }
常用方法
不为空则返回对象
  • T orElse(T other) 如果存在该值,返回值, 否则返回 other。
  • T orElseGet(Supplier<? extends T> other) 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
  • T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常。
不为空则执行动作
  • void ifPresent(Consumer<? super T> consumer) 如果值存在则使用该值调用 consumer ,否则不做任何事情。
  • Optional map(Function<? super T,? extends U> mapper)
    如果有值,则对其执行调用映射函数得到返回值。如果返回值不为 null,则创建包含映射返回值的Optional作为map方法返回值,否则返回空Optional。
  • Optional flatMap(Function<? super T,Optional> mapper)
    如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional(
    区别于Map,返回类型是Optional)
不为空则过滤
  • Optional filter(Predicate<? super predicate) 如果值存在,并且这个值匹配给定的
    predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。
总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值