Java 在多个ListenableFutures返回后继续执行

Java 在多个ListenableFutures返回后继续执行,java,guava,Java,Guava,我有一个应用程序,它接受用户命令来执行数据库查找。我解析命令/参数,然后迭代每个命令/参数,调用一个处理程序,该处理程序接受该值并构建一个查询条件 然而,到目前为止,这个过程是完全同步的。每个处理程序将执行并添加条件,循环完成后,我可以执行查询 现在,其中一个处理程序必须联系远程服务器来转换一些数据,这意味着它将返回一个ListenableFuture ListenableFuture<Profile> profile = getProfile("someUserName"); p

我有一个应用程序,它接受用户命令来执行数据库查找。我解析命令/参数,然后迭代每个命令/参数,调用一个处理程序,该处理程序接受该值并构建一个查询条件

然而,到目前为止,这个过程是完全同步的。每个处理程序将执行并添加条件,循环完成后,我可以执行查询

现在,其中一个处理程序必须联系远程服务器来转换一些数据,这意味着它将返回一个
ListenableFuture

ListenableFuture<Profile> profile = getProfile("someUserName");

profile.addListener(new Runnable() {
    @Override
    public void run() {
        try {
            query.addCondition(Condition.of("user.$id", MatchRule.EQUALS, profile.get().getUniqueId()));
        } catch (InterruptedException | ExecutionException e) {
           // handle
        }
    }
}, MoreExecutors.sameThreadExecutor());
ListenableFuture profile=getProfile(“someUserName”);
profile.addListener(新的Runnable(){
@凌驾
公开募捐{
试一试{
query.addCondition(Condition.of(“user.id”、MatchRule.EQUALS、profile.get().getUniqueId());
}捕获(中断异常|执行异常e){
//处理
}
}
},MoreExecutors.sameThreadExecutor());
我正在尝试确定最佳方法,以确保在该
ListenableFuture
完成之前不执行查询。让我困惑的部分原因是,我需要假设可能有多个未决请求

例如,如果有人输入
p=user1、user2,我们需要发出两个请求,因此将有两个
ListenableFuture
s挂起

只有在两者都完成后,我才能执行最终查询

我如何才能做到这一点?

允许您获取一组
ListenableFuture
,然后取出一个
ListenableFuture
,当其所有输入完成并返回结果列表时完成。这听起来像是你需要的