gar*_*ble 2 java exception optional java-8 java-stream
我正在实现一个流,在其中使用集合listOfFoo来获取该列表中所有项目的ID,并使用它们来获取Bar实例的值。
我想确保此方法在酒吧列表上没有任何项目的情况下将抛出ResourceNotFoundException,尽管在当前状态下它会检查列表酒吧是否为null,而不是,因为它包含一个空列表。
您能帮我一下,并提出一些解决方案吗?
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));
Run Code Online (Sandbox Code Playgroud)
I don't really see the benefit of using Optional, it would be more readable without it :
List<Bar> bars = listOfFoos.stream()
.map(Foo::getId)
.map(service::getBars)
.collect(Collectors.toList());
if (bars.isEmpty()) {
throw new ResourceNotFoundException(Bar.class, OBJECT_NULL);
}
Run Code Online (Sandbox Code Playgroud)
只需添加一个Optional.filter即可。你可以这样做:
List<Bar> bars = Optional.ofNullable(
listOfFoos.stream().map(fooId -> service.getBars(fooId))
.filter(Objects::nonNull).collect(Collectors.toList()))
.filter(a -> !a.isEmpty())
.orElseThrow(() -> new ResourceNotFoundException(Bar.class, OBJECT_NULL));
Run Code Online (Sandbox Code Playgroud)
旁白:通过代码中共享的实现,流返回的列表不可能是null,因此Optional.ofNullable可能会被替换为Optional.of。
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |