Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用CompletableFuture打开并将列表中的所有结果收集到线程中?_Java_Multithreading_Asynchronous_Completable Future - Fatal编程技术网

Java 如何使用CompletableFuture打开并将列表中的所有结果收集到线程中?

Java 如何使用CompletableFuture打开并将列表中的所有结果收集到线程中?,java,multithreading,asynchronous,completable-future,Java,Multithreading,Asynchronous,Completable Future,我有一个字符串列表,对于每一个字符串,我都需要打开一个新线程,并将所有信息收集到一个完整的未来 这是我的迭代: for (String result: results) { candidateInfos.add(getCandidatesInfo(result)); } 我第一次尝试线程的实现,希望能得到一些帮助。您可以为每个方法调用构建流,然后将结果收集到一个列表中,如下所示 Stream.Builder<Supplier<CanditateInfo>> st

我有一个字符串列表,对于每一个字符串,我都需要打开一个新线程,并将所有信息收集到一个完整的未来

这是我的迭代:

for (String result: results) {
    candidateInfos.add(getCandidatesInfo(result));
}

我第一次尝试线程的实现,希望能得到一些帮助。

您可以为每个方法调用构建流,然后将结果收集到一个列表中,如下所示

Stream.Builder<Supplier<CanditateInfo>> streamBuilder = Stream.builder();

results.forEach(string-> streamBuilder.accept(() -> this.getCandidatesInfo(string)));

List<CanditateInfo> candidateInfos = streamBuilder.build().map(supplier -> CompletableFuture.supplyAsync(supplier, Executors.newFixedThreadPool(
  results.size()))).collect(Collectors.toList()).stream().map(
     CompletableFuture::join).collect(Collectors.toList());
Stream.Builder streamBuilder=Stream.Builder();
results.forEach(string->streamBuilder.accept(()->this.getCandidatesInfo(string));
列出CandidateInfo=streamBuilder.build().map(供应商->CompletableFuture.SupplySync(供应商,执行者.newFixedThreadPool(
results.size())).collect(Collectors.toList()).stream().map(
CompletableFuture::join).collect(Collectors.toList());
这里我使用了单独的执行器,因为默认情况下,java使用公共的Fork和Join池,如果池被填满,它将阻塞所有其他线程。有关更多信息,请参见

A是获得帮助的良好开端