首页 > 解决方案 > 如何通过可迭代/列表动态链接 Observables?

问题描述

我目前正在使用 RxJava,我有这样的东西,

List<Integer> taskIds = ...

Observable.just(new Task(taskIds.get(0)))
        .compose(executeWorkFlow())
        .filter(Response::isSuccess)
        .flatMap(res -> Observable.just(new Task(taskIds.get(1)))
        .compose(executeWorkFlow())
        .filter(Response::isSuccess)
        .flatMap(res -> Observable.just(new Task(taskIds.get(2)))
        .compose(executeWorkFlow())
        .filter(Response::isSuccess)
        ...

execute() 是一个执行 API 调用并返回响应的 Transformer,即

ObservableTransformer<Task, Response> execute() { ... }

有没有更好的方法来写这个?鉴于我不知道之前的 Observable 会发出多少个任务 ID。

标签: javarx-javarx-java2

解决方案


使用fromIterable,concatMaptakeUntil(Predicate):

Observable.fromIterable(tasks)
    .concatMap(task ->
        Observable.just(new Task(task))
            .compose(executeWorkFlow())
    )
    .takeUntil(response -> !response.isSuccess)

推荐阅读