有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果流未返回任何结果,Java8将引发异常

我很好奇,在以下情况下是否可以使用orElseThrow(),或者是否有更多的Java 8方法可以将其等效为1-liner

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

共 (1) 个答案

  1. # 1 楼答案

    你可以试试这个:

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

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