Java 可选 orElseThrow 与空集合

标签 java exception java-8 java-stream option-type

我正在实现一个流,其中使用集合listOfFoo来获取该列表中所有项目的ID,并使用它们来获取Bar实例的值。

我想确保如果条形列表上没有项目,此方法将抛出ResourceNotFoundException,尽管在​​当前状态下它会检查列表条形是否为空,但事实并非如此,因为它包含一个空列表。

您能帮我并提出一些解决方案吗?

List<Bar> bars = Optional.ofNullable(
           listOfFoos.stream()
           .map(Foo::getId)                                         
           .map(fooId -> service.getBars(fooId))                                            
       .filter(Objects::nonNull)
       .collect(Collectors.toList()))                            
       .orElseThrow(() -> new ResourceNotFoundException(Bar.class, OBJECT_NULL));

最佳答案

我并没有真正看到使用Optional的好处,如果没有它,它会更具可读性:

List<Bar> bars = listOfFoos.stream()
   .map(Foo::getId)       
   .map(service::getBars)                    
   .collect(Collectors.toList());

if (bars.isEmpty()) {
   throw new ResourceNotFoundException(Bar.class, OBJECT_NULL);
}

关于Java 可选 orElseThrow 与空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060543/

相关文章:

java - 在 JavaFX 时间轴完成后返回一个值

java - "Column count doesn' t匹配值计数在第1行”程序错误

c++ - 如何在卡萨布兰卡捕获多个任务的异常

android - base64 无效 key 异常 : Key length not 128/192/256 bits

Java 8 forEach 只适用于某些?

Java Stream GroupBy 和 Reduce

java - 如何将字节流图像数据放入JSON对象中?

Django - 在引发错误后在 transaction.atomic block 内对数据库进行操作

java-8 - 未知大小的 AbstractSpliterator 实现抛出 OutOfMemoryError : Java heap space

lambda - 在使用lambda表达式进行排序之前,请检查null值