java - 在java中获取可选类型的列表

标签 java

我得到了 java 中可选类型的列表,如下所示 -

final Optional<AbcDTO> fetchList = usersDAO.fetchList(abcCode, abcDTO);
final AbcDTO abcDTO = fetchList.get();

我正在使用 JDK 11,并且想要检查 list(fetchList) 是否为空,然后我想抛出一个运行时异常,否则我想继续该列表。

请告知如何做同样的事情。

最佳答案

Optional 可以包含对象,也可以不包含对象。里面有什么并不重要。

通常,.get() 为您提供包装在 Optional 中的对象。但如果没有对象(它包装了 null),您将得到一个异常。

要检查其中的对象是否存在,您可以只说OptionalObject.isPresent()。这将返回一个 boolean,它告诉您 OptionalObject 是否实际包装了一个对象。

if(fetchList.isEmpty()) {
    throw new RuntimeException();
    // Consider not to throw RuntimeExceptions (see comments below)
}
// Continue your programme

实际上,.isEmpty() 仅从 Java 11 起可用。在以前的版本中,这可以通过否定 .isPresent() 来实现。

if(!fetchList.isPresent()) {
    throw new RuntimeException();
}
// Continue your programme

对于这种情况,另一种更短、更简单的选择是 @ernest_k 建议的。它获取包装在 Optional 中的元素。如果Optional为空,则抛出.orElseThrow()中提到的异常。此外,lambda 表达式可以转换为方法引用(考虑一个很好的异常(exception))。

AbcDTO abcDTO = fetchList.orElseThrow(RuntimeException::new);

无论如何,此代码仅检查 List 对象是否存在。要进一步检查现有 List 是否没有条目,您可以为列表调用 .isEmpty()(不仅适用于 Optional)。

if(abcDTO.isEmpty()) {
    throw new RuntimeException();
}

关于java - 在java中获取可选类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58229792/

相关文章:

java - 为 Eclipse 安装 Drools 插件时出错

java - Java Visual VM 中的实际运行线程

java - 在 Java 中具有整数值的字符数组

java - 如何将 PDF 转换为 JSON/EXCEL/WORD 文件?

java - 共享 Ivy 配置

java - Google 先决条件非法参数异常

java - 在 Android 上使用 Google 登录访问 Google 电子表格(或其他 Google 应用程序)

java - 匹配完整异常名称的正则表达式

Java - 忽略异常并继续

java - Sonarqube 未涵盖主要代码