我正在实现一个流,其中使用集合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/