如果流未返回任何结果,Java8将引发异常
我很好奇,在以下情况下是否可以使用orElseThrow,或者是否有更多的Java8方法来实现与1-liner相同的功能如果流未返回任何结果,Java8将引发异常,java,Java,我很好奇,在以下情况下是否可以使用orElseThrow,或者是否有更多的Java8方法来实现与1-liner相同的功能 Collection<Foo> foo = blah.stream().filter(somePredicate).collect(Collectors.toList()); if (foo.isEmpty()) { throw new Exception("blah"); } 你可以试试这个: Collection<Foo> foo = bla
Collection<Foo> foo = blah.stream().filter(somePredicate).collect(Collectors.toList());
if (foo.isEmpty()) {
throw new Exception("blah");
}
你可以试试这个:
Collection<Foo> foo = blah.stream().filter(somePredicate)
.collect(Collectors.collectingAndThen(Collectors.toList(), Optional::of))
.filter(l -> !l.isEmpty())
.orElseThrow(() -> new Exception("blah"))
请注意,与您的代码相比,这会分配一个额外的可选实例。也许Collectors.collectingAndThen方法会有所帮助。明白了,谢谢。我想我会坚持原版,但知道这个选项存在是件好事