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));