3

我必须改进一项旧服务,该服务对同一服务进行多次连续调用并将所有结果合并到一个列表中。

假设我们有一个 IDS = [ 1 ,2 3, .. 6] 的列表,所以我必须使用每个 ID 调用相同的 API(使用改造和 Observables)。

为此,我想使用 Rx Android,但我对如何合并结果有疑问。

        Integer[] ids = {1, 2, 3};

        Observable.from(ids)
                .map(id -> mApi.getData(id))

我们可以进行并行调用并按照相同的顺序合并结果吗?

为了提高时间响应,想法是并行执行此操作,但我不知道如何确保结果将按照我们执行服务器调用的相同顺序进行组合。

我想使用concathttp://reactivex.io/documentation/operators/concat.html),但它等待前一个 observable 等待。

4

1 回答 1

5

请参阅concatMapEager及其变体。

Observable.fromArray(1, 2, 3)
.concatMapEager(id -> 
    Observable.fromCallable(() -> mApi.getData(id))
    .subscribeOn(Schedulers.io())
)
.subscribe(...);
于 2017-01-19T13:27:40.230 回答