带有空集合的Java可选OrelsThrow
我正在实现一个流,在这个流中,我使用一个集合listOfFoo来获取该列表中所有项目的ID,并使用它们来获取Bar实例的值 我想确保,如果bars列表中没有项目,该方法将抛出ResourceNotFoundException,尽管在当前状态下,它会检查列表栏是否为空,因为它包含一个空列表 你能帮我提出一些解决办法吗带有空集合的Java可选OrelsThrow,java,exception,java-8,java-stream,optional,Java,Exception,Java 8,Java Stream,Optional,我正在实现一个流,在这个流中,我使用一个集合listOfFoo来获取该列表中所有项目的ID,并使用它们来获取Bar实例的值 我想确保,如果bars列表中没有项目,该方法将抛出ResourceNotFoundException,尽管在当前状态下,它会检查列表栏是否为空,因为它包含一个空列表 你能帮我提出一些解决办法吗 List<Bar> bars = Optional.ofNullable( listOfFoos.stream() .map(
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));
列表栏=可选。不可用(
listofoos.stream()
.map(Foo::getId)
.map(fooId->service.getbar(fooId))
.filter(对象::非空)
.collect(收集器.toList())
.orelsetrow(()->new ResourceNotFoundException(Bar.class,OBJECT_NULL));
只需添加一个可选的。然后对其进行筛选。你可以这样做:
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));
列表栏=可选。不可用(
listofoos.stream().map(fooId->service.getbar(fooId))
.filter(Objects::nonNull).collect(collector.toList())
.filter(a->!a.isEmpty())
.orelsetrow(()->new ResourceNotFoundException(Bar.class,OBJECT_NULL));
旁白:通过代码中共享的实现,流返回的列表不能是null
,因此可选。不可用的
可能会被可选替换。对于的我真的看不到使用可选的好处,没有它会更可读:
List<Bar> bars = listOfFoos.stream()
.map(Foo::getId)
.map(service::getBars)
.collect(Collectors.toList());
if (bars.isEmpty()) {
throw new ResourceNotFoundException(Bar.class, OBJECT_NULL);
}
List bar=listofoos.stream()
.map(Foo::getId)
.map(服务::getBars)
.collect(Collectors.toList());
if(bar.isEmpty()){
抛出新的ResourceNotFoundException(Bar.class,OBJECT_NULL);
}
这本书高效Java提到了以下内容:
容器类型,包括集合、映射、流、数组和
期权不应包装在期权中。(临252)