我有一個字符串列表,對於他們每個人,我需要打開一個新線程並將所有信息收集到CompletableFuture中。如何使用CompletableFuture打開並將列表中的所有結果收集到線程中?
這是我的迭代:
for (String result: results) {
candidateInfos.add(getCandidatesInfo(result));
}
我試圖首次線程的執行情況和我將不勝感激一些幫助。
我有一個字符串列表,對於他們每個人,我需要打開一個新線程並將所有信息收集到CompletableFuture中。如何使用CompletableFuture打開並將列表中的所有結果收集到線程中?
這是我的迭代:
for (String result: results) {
candidateInfos.add(getCandidatesInfo(result));
}
我試圖首次線程的執行情況和我將不勝感激一些幫助。
您可以爲每個方法調用構建Stream,然後可以按如下方式將結果收集到列表中。
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());
在這裏,我因爲默認情況下使用的獨立執行程序,JAVA使用公共fork和join池,這將阻止所有其他線程如果池會得到填補。欲瞭解更多信息,請參閱http://fahdshariff.blogspot.in/2016/06/java-8-completablefuture-vs-parallel.html
非常感謝你,它是做正確的事情! – ttdol2506
[MCVE]很好的開始獲得幫助 – efekctive