目录

1.判断执行的方法返回值是否为null

2.如果不为空则结束


以下是Optional类的一些主要方法:

  1. Optional.empty():返回一个空的Optional对象。
  2. Optional.of(T value):返回一个包含给定非null值的Optional。
  3. Optional.ofNullable(T value):如果非空,可返回一个包含值的Optional,否则返回一个空的Optional。
  4. Optional.get():如果值存在返回值,否则抛出NoSuchElementException。
  5. Optional.isPresent():如果值存在则方法会返回true,否则返回 false。
  6. Optional.ifPresent(Consumer<? super T> consumer):如果值存在,就执行给定的代码块。
  7. Optional.orElse(T other):如果有值则将其返回,否则返回指定的other对象。
  8. Optional.orElseGet(Supplier<? extends T> other):如果有值则将其返回,否则返回从suppiler获取的值。
  9. 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中定义的异常。简单来说,第一段代码在值存在时执行操作,而第二段代码在值不存在时执行操作。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐