java - 如果流没有返回结果,Java 8 会抛出异常
问题描述
我很好奇是否可以在以下情况下使用 orElseThrow() 或者是否有更多的 Java 8 方法可以将其等效为 1-liner?
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"))
请注意,与您的代码相比,这会分配一个额外的Optional
实例。
推荐阅读
- java - 每当在java中调用特定类的函数时如何运行一些代码
- javascript - 如何安全地隐藏 HTML 中的元素?
- matlab - 查找matlab函数参数类型的最快方法?
- javascript - 在 javascript 中对对象数组进行排序
- apache-spark-sql - 列出 delta-lake 中的视图
- javascript - 如何测试您无法直接访问的功能
- machine-learning - sklearn.model_selection.StratifiedKFold 中的 shuffle 参数?
- amazon-web-services - terraform aws_lb 被污染并且资源正在重新创建
- javascript - JavaScript:如何过滤嵌套对象数组?
- list - 如何在 Flutter 中制作自定义列表?