【发布时间】:2020-02-01 02:24:50
【问题描述】:
好的,使用 Java 8,需要知道下面的代码是否符合我的要求。
- 我有三种方法。每个都执行一个操作并以布尔值的形式返回成功或失败。
- 我需要让所有三个同时运行。
- 如果有任何返回
false,第一个这样做会导致整个进程短路,主方法返回false。 - 如果它们都没有返回
false,则所有三个都需要运行完成并返回true,以便主方法返回true。
我的代码:
private boolean checkProcess1(){
//does stuff, mostly DB schema checking
}
private boolean checkProcess2(){
//does stuff, mostly queries on a different DB
}
private boolean checkProcess3(){
//does stuff, checking files and versioning
}
public boolean checkProcessesForSuccess(){
final List<Supplier<Boolean>> checkList = Arrays.asList(
this::checkProcess1,
this::checkProcess2,
this::checkProcess3
);
return checkList.parallelStream().allMatch( Supplier :: get );
}
我的主要症结在于.allMatch()。它应该采用一个谓词来确定如何评估列表中的每个项目。通过传入Supplier :: get,它是否不会在任何完整匹配集(例如所有false 值)上返回true,还是要求所有值都是true为了返回true?
另外,如果第一个返回结果的方法是false,这会短路整个主方法,还是继续处理直到三个都完成?我担心的是,如果一个短期运行的方法返回一个false,整个系统将被最长运行的方法绑定。
我有 previously tried to utilize CompletableFuture 来解决这个问题,我确实想出了一个解决方案,但它有点复杂,而且 - 老实说 - 非常不优雅和丑陋。我求助于 Streams,试图看看这个问题是否可以以更简单、更优雅的方式解决。
建议?
【问题讨论】:
标签: java java-8 parallel-processing java-stream