Optional中的orElse、orElseGet、orElseThrow


orElse

当Optional值不存在时,调用orElse()返回orElse()的参数,如果Optional的值存在时返回Optional的值。

System.out.println(Optional.ofNullable(null).orElse("orElse")); // orElse
System.out.println(Optional.ofNullable("test").orElse("null value")); // test

orElseGet

当Optional值不存在时,调用orElseGet()中接口调用的返回值,如果Optional的值存在时返回optional的值。

System.out.println(Optional.ofNullable(10000).orElseGet(() -> 1000)); // 一万
System.out.println(Optional.ofNullable(null).orElseGet(() -> 1000)); // 1000

orElse和orElseGet最直观的区别在于orElseGet可以传入一个Supplier接口,来定制实现逻辑。

orElseThrow

如果存在该值,返回包含的值,否则抛出由Supplier继承的异常(除了null,其他空类型的数据都属于存在该值)

CouponVo useCoupon = couponList.stream().filter(couponVo -> couponId.equals(couponVo.getId()))
                .findFirst().orElseThrow(() -> new ApiException(OrderCode.ORDER_COUPON_ERROR));

文章作者: Lanren
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lanren !
  目录