gpt4 book ai didi

java - Streams - 过滤所有不抛出异常的内容

转载 作者:行者123 更新时间:2023-11-30 06:03:38 25 4
gpt4 key购买 nike

假设我有一个报告流,并且有一个方法可以检查用户是否有权阅读每个报告。如果用户没有权限,该方法会抛出异常

checkReadAuthorization(Report report) throw AccessViolationException;

有没有办法过滤掉该方法抛出异常的所有报告?像这样的东西:

reports.stream()
.filterThrowingException(this::checkReadAuthorization);

现在我有一个函数,如果抛出异常,它会返回 true 或 false,但我想知道是否有更好的方法来实现此目的

private boolean checkAuthorization(Report report) {
try {
checkReadAuthorization(report);
return true;
} catch(AccessViolationException ex) {
return false;
}
}

然后我在这样的过滤器中使用它

return dossiers.stream()
.filter(this::checkAuthorization)
.collect(Collectors.toList());

最佳答案

当前的 Stream-API 中没有类似“filterThrowingException”的内容。您只能使用 Stream::filter 内的 try-catch 来决定保留或过滤掉 Report:

List<Report> filtered = list.stream().filter(report -> {
try {
this.checkAuthorization(report);
} catch (AccessViolationException ex) {
return false;
}
return true;
}).collect(Collectors.toList());

就我个人而言,我建议更改 checkReadAuthorization 方法的接口(interface),以返回 boolean 指示输入是否有效。

private boolean checkReadAuthorization(Report report) { /* ... */ }

此结果可以用作过滤器中的谓词。

List<Report> filtered = list.stream()
.filter(this::checkReadAuthorization)
.collect(Collectors.toList());

总结:最好改变验证类和方法的设计,而不是尝试 Stream-API 来适应不是最佳的。

关于java - Streams - 过滤所有不抛出异常的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51765876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com