我得到了 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/