在期货清单上流式传输的最有效方式

我通过流式传输对象列表来调用异步客户端方法。 该方法返回Future。

迭代调用后返回的Futures列表的最佳方法是什么(以便处理那些首先出现的Future)?

注意:异步客户端仅返回Future not CompletableFuture。

以下是代码:

List<Future> listOfFuture = objectsToProcess.parallelStream() .map((object) -> { /* calling an async client returning a Future */ }) .collect(Collectors.toList()); 

拥有List>这个列表,我会将它提交给自定义池,而不是使用默认的流并行处理。

这是因为流api使用公共池进行并行处理,您将调用那些Futures上的get (如果需要大量时间进行处理) – 您将阻止在您的应用程序中使用并行操作的所有其他流操作,直到完成此操作。

这有点像这样:

 forJoinPool.submit( () -> list.stream().parallel().map(future -> future.get()).collect(Collectors.toList())).get(); 

我会选择这里显示的自定义池