gpt4 book ai didi

java - 如何处理 Java 8 Stream 中的异常?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:21:54 25 4
gpt4 key购买 nike

我有一种遍历列表并创建列表的方法。在这样做的同时,我正在调用一个方法 (createResult) 来给出结果,同时抛出 CustomException,我将其包装为 ResultClassException。但我一直收到错误信息,提示未处理的异常。

我的代码:

 private  List<Result> getResultList(List<String> results) throws ResultClassException {
List<Result> resultList = new ArrayList<>();
results.forEach(
(resultName) -> {
if (!resultRepository.contains(resultName)) {
try {
final Result result = createResult(resultName);
resultList.add(result);
} catch (CustomException e) {
throw new ResultClassException("Error",e);
}

} else {
resultList.add(resultRepository.get(resultName));
log.info("Result {} already exists.", resultName);
}
}
);
return Collections.unmodifiableList(resultList);
}

谁能告诉我哪里做错了?

最佳答案

您的方法中可能有太多责任。您应该考虑将其拆分为一种仅映射的方法和另一种收集它们的方法。

private List<Result> getResultList(List<String> names) throws ResultClassException {
try {
return names.stream()
.map(this::getOrCreateResult)
.collect(collectingAndThen(toList(), Collections::unmodifiableList));
} catch (RuntimeException e) {
if (e.getCause() instanceof CustomException) {
throw new ResultClassException("Error", e.getCause());
}
throw e;
// Or use Guava's propagate
}
}

private Result getOrCreateResult(String name) {
if (!resultRepository.contains(name)) {
try {
return createResult(name);
} catch (CustomException e) {
throw new RuntimeException(e);
}
} else {
log.info("Result {} already exists.", name);
return resultRepository.get(name);
}
}

关于java - 如何处理 Java 8 Stream 中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383475/

25 4 0