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

4

我很好奇在以下情况下是否可以使用orElseThrow(),或者是否有更多Java 8的方式将其转换为1行代码?

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

也许 Collectors.collectingAndThen() 方法可以提供帮助。 - Spasoje Petronijević
1个回答

11
你可以尝试这个:
Collection<Foo> foo = blah.stream().filter(somePredicate)
    .collect(Collectors.collectingAndThen(Collectors.toList(), Optional::of))
    .filter(l -> !l.isEmpty())
    .orElseThrow(() -> new Exception("blah"))

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

1
明白了,谢谢。我想我会坚持使用原始的,但知道这个选项存在很好。 - ekjcfn3902039

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接