目录
以下是Optional类的一些主要方法:
Optional.empty()
:返回一个空的Optional对象。Optional.of(T value)
:返回一个包含给定非null值的Optional。Optional.ofNullable(T value)
:如果非空,可返回一个包含值的Optional,否则返回一个空的Optional。Optional.get()
:如果值存在返回值,否则抛出NoSuchElementException。Optional.isPresent()
:如果值存在则方法会返回true,否则返回 false。Optional.ifPresent(Consumer<? super T> consumer)
:如果值存在,就执行给定的代码块。Optional.orElse(T other)
:如果有值则将其返回,否则返回指定的other对象。Optional.orElseGet(Supplier<? extends T> other)
:如果有值则将其返回,否则返回从suppiler获取的值。Optional.orElseThrow(Supplier<? extends X> exceptionSupplier)
:如果有值则将其返回,否则抛出由指定的供应者创建的异常。
1.判断执行的方法返回值是否为null
PayLoanRecord payLoanRecord =
Optional.ofNullable(
payLoanRecordService.getOne(new QueryWrapper<PayLoanRecord>().lambda()
.eq(PayLoanRecord::getOrderId, reference)
.eq(PayLoanRecord::getPayChannel, PayChannelEnum.MNF)
.eq(PayLoanRecord::getOrg, org))
).orElseThrow(() ->
new ProcessException(String.format("未找到PayLoanRecord记录,orderId:%s,org:%s", reference, org)));
在ifPresent
方法和orElseThrow
方法方面,第一段代码使用了ifPresent
这个方法,这意味着如果Optional
中的值存在,即非null
,那么就会执行ifPresent
后面的lambda表达式。
2.如果不为空则结束
Optional.ofNullable(
this.getOne(new LambdaQueryWrapper<StackCallbackRefund>()
.eq(StackCallbackRefund::getTransactionReference, refund.getTransactionReference())
.eq(StackCallbackRefund::getStatus, refund.getStatus()))
).ifPresent((stackCallbackRefund)-> {
log.info("回调表中已有记录transaction_reference:{}",stackCallbackRefund.getTransactionReference());
throw new ProcessException("回调表中已有记录");
});
第二段代码使用了 orElseThrow
,这意味着如果Optional
中的值不存在,即为null
,那么就会抛出orElseThrow
中定义的异常。简单来说,第一段代码在值存在时执行操作,而第二段代码在值不存在时执行操作。