java - 如何等待 future 列表得到满意的结果?

标签 java future completable-future

在 java 中,我有一个可以返回结果或 null 的 future 列表。 如何等待最先完成的一个,如果它返回一个结果,则忽略其余的,但如果它返回 null,则等待另一个完成?

最佳答案

向列表中的每个 future 添加完成处理程序以完成辅助 future:

List<CompletableFuture<String>> futures = ...
    
var firstNonNull = new CompletableFuture<String>();
futures.forEach(future -> future.whenComplete( (value, failure) -> {
    if (value != null) {
        firstNonNull.complete(value);
    }
}));

firstNonNull.whenComplete(...)

现在,一旦 futures 中的第一个 future 以非 null 值完成,firstNonNull 就会完成。

关于java - 如何等待 future 列表得到满意的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75726651/

相关文章:

java - CompletableFuture.thenAccept 确实可以阻塞

java - 如何在@Stateless bean中设置@WebMethod的超时值?

java - 类(实现接口(interface))和接口(interface)位于同一文件中,并从不同包中的主类访问该类

java - 通过 DataInputStream 连续读取套接字消息的正确方法是什么?

multithreading - 如何找到每个 future 在 Scala 中花费的时间?

java - CompletableFuture allOf 方法行为

java - Android:点击渐进的可见性变化

java - ExecutorService:如何检查我的 Callable 是否正在执行?

C++0x 线程没有加速

generics - 为什么编译器给我这不能从 CompletableFuture<Object> 转换为 CompletableFuture<String>