Я практикуюсь с 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's Future?




Это легко сделать в 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");
}
Если у вас нет RX в вашем проекте, не нужно его приносить. Вы можете решить эту проблему с помощью CompositeFuture:
List<Future> futures = new ArrayList<>();
futures.add(/* Your Futures here */);
CompositeFuture.all(futures);