如果流没有返回结果,Java 8 抛出异常

ekj*_*039 4 java

我很好奇是否可以在以下情况下使用 orElseThrow() ,或者是否有更多 Java 8 方法来执行相当于 1-liner 的操作?

Collection<Foo> foo = blah.stream().filter(somePredicate).collect(Collectors.toList());
if (foo.isEmpty()) {
  throw new Exception("blah");
}
Run Code Online (Sandbox Code Playgroud)

jan*_*nis 11

你可以试试这个:

Collection<Foo> foo = blah.stream().filter(somePredicate)
    .collect(Collectors.collectingAndThen(Collectors.toList(), Optional::of))
    .filter(l -> !l.isEmpty())
    .orElseThrow(() -> new Exception("blah"))
Run Code Online (Sandbox Code Playgroud)

请注意,与您的代码相比,这会分配一个额外的Optional实例。