【发布时间】:2015-07-18 23:23:11
【问题描述】:
假设我有一个抛出运行时异常的方法。我正在使用Stream 对列表中的项目调用此方法。
class ABC {
public void doStuff(MyObject myObj) {
if (...) {
throw new IllegalStateException("Fire! Fear! Foes! Awake!");
}
// do stuff...
}
public void doStuffOnList(List<MyObject> myObjs) {
try {
myObjs.stream().forEach(ABC:doStuff);
} catch(AggregateRuntimeException??? are) {
...
}
}
}
现在我希望处理列表中的所有项目,并将单个项目上的任何运行时异常收集到一个“聚合”运行时异常中,该异常将在最后抛出。
在我的真实代码中,我进行了可能引发运行时异常的第 3 方 API 调用。我想确保所有项目都得到处理并在最后报告任何错误。
我可以想出一些方法来解决这个问题,例如捕获并返回异常的 map() 函数 (..shudder..)。但是有没有一种本地方法可以做到这一点?如果没有,是否有另一种方法可以干净地实现它?
【问题讨论】:
-
这感觉像是在滥用异常机制。您在这里的真正用例是什么?验证一组操作并报告失败的原因?
-
@Kayaman 不完全是。我正在进行可能引发运行时异常的第 3 方 API 调用。我要做的就是确保所有项目都得到处理并在最后报告任何错误。
-
你真的需要使用流吗?没有它,这是微不足道的。
-
@Kayaman 我知道,对吧?但我希望最终能使用
parallelStream。 -
我的 stream-fu 不太强大,无法给你一个很好的答案,但基于 this discussion on streams and exceptions,基于流的解决方案最终会至少有点狡猾。
标签: java exception-handling java-8 java-stream