В настоящее время у меня есть служба, которая возвращает список параметров. если есть 4 параметра, мне нужно выполнить один запрос на параметр к той же конечной точке, используя каждый параметр. После этого мне нужно сохранить список результатов всего запроса в коллекцию. Если я не знаю, сколько запросов мне нужно выполнить, Какой оператор rxJava мне нужно использовать и как его использовать?. Учтите, что мне не нужно ждать ответа на первый запрос, чтобы выполнить второй и ....
Я видел, что оператор zip позволяет мне выполнять параллельный запрос, но я должен знать количество запросов, чтобы использовать его.
Вы можете использовать flatMap для создания Observable для каждого parameter и выполнять их параллельно, как в
Observable.fromArray(parameters)
.flatMap(val -> Observable.just(val)
.subscribeOn(Schedulers.io())
.map(request -> doApiCall(request))
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> log(response));
Да, спасибо мое плохое
В конце концов я реализовал это так:
public Subscription getElementsByStage(List <String> requiredStages) {
List < Observable <ElementsResponse>> observables = new ArrayList < > ();
for (String stage: requiredStages) {
ElementsRequest request = buildElementRequest(stage);
observables.add(request).subscribeOn(Schedulers.newThread()));
}
Observable zippedObservables = Observable.zip(observables, this::arrangeElementsByStage);
return zippedObservables
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber <HashMap<Stage,Element>>() {
.....
}
}
ваш вызов
.subscribeOn(AndroidSchedulers.mainThread())не повлияет на изменение потоков, должен ли.observeOn(AndroidSchedulers.mainThread())изменитьThreadвObserver?