我练习使用vertx.io和我的反应性菜鸟。在我的场景中,我必须进行n
次操作并一起收集结果以完成我的职责:
public void doSomething(String[] params, Handler<AsyncResult<List<Stuff>>> h) {
for(int i=0; i<params.length; i++) {
doSomethingElse(params[i], hElse -> {
// compose the list of Stuff
...
});
}
}
我希望在完成doSomethingElse
之前收集每个doSomething
方法的结果。这是实现这一目标的正确方法是什么?我应该更改我的代码以使用vertx.io
的未来吗?
答案 0 :(得分:2)
这可以在rx
中轻松完成。只需确保doSomethingElse
返回Single
即可。如果您有多个数据,也可以将Single
替换为Observable
。
public void doSomething(String[] params, Handler<AsyncResult<List<Stuff>>> h) {
List<Single<String>> list = new ArrayList();
for(int i=0; i<params.length; i++) {
list.push(doSomethingElse(params[i]))
}
Single.zip(list, r -> r)
.map(results -> {
// Results
})
.subscribe();
}
public Single<String> doSomethingElse(String param){
return Single.just("Hello");
}
答案 1 :(得分:1)
如果您的项目中没有RX,则无需携带。 您可以使用CompositeFuture解决这个问题:
List<Future> futures = new ArrayList<>();
futures.add(/* Your Futures here */);
CompositeFuture.all(futures);