Optional容器的使用技巧,判空处理

目录

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中定义的异常。简单来说,第一段代码在值存在时执行操作,而第二段代码在值不存在时执行操作。

相关推荐

  1. Optional容器使用技巧处理

    2024-06-19 02:10:01       29 阅读
  2. Hive函数 COALESCE 和 NVL 使用示例

    2024-06-19 02:10:01       34 阅读
  3. 使用 Optional 优雅处理可能为null

    2024-06-19 02:10:01       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 02:10:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 02:10:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 02:10:01       87 阅读
  4. Python语言-面向对象

    2024-06-19 02:10:01       96 阅读

热门阅读

  1. 如何编辑和修改ROM,快速上手

    2024-06-19 02:10:01       35 阅读
  2. 使用 Redis 生成分布式唯一ID

    2024-06-19 02:10:01       31 阅读
  3. 带你学习Mybatis之ResultSetHandler结果集处理

    2024-06-19 02:10:01       24 阅读
  4. Docker 容器相关的常见面试问题及答案

    2024-06-19 02:10:01       27 阅读
  5. CAPL如何在底层模拟TCP Client端建立TCP连接

    2024-06-19 02:10:01       27 阅读
  6. 【Python数据分析】Pandas_聚合函数

    2024-06-19 02:10:01       36 阅读
  7. c++控制结构if陈述

    2024-06-19 02:10:01       32 阅读
  8. 力扣2476.二叉搜索树最近节点查询

    2024-06-19 02:10:01       28 阅读
  9. 热门开源项目推荐

    2024-06-19 02:10:01       30 阅读