【问题标题】:Composing two observable sources using one as a predicate in RxJava在 RxJava 中使用一个作为谓词组合两个可观察源
【发布时间】:2019-08-22 23:13:53
【问题描述】:

我有 2 个可观察的来源,其中 fetchProductList() 返回 Observable<Datasource> 和其他 canInvite.execute() 接受一个值并返回一个 Single<Boolean>。我需要组合流以将每个发射从第一个源馈送到第二个源,以便我可以将 fetchProductList() 的所有发射与 true 值作为列表返回。我尝试以这种方式编写它,但它看起来有点笨拙,有更好/更简单的方法吗?

fetchProductList()
                    .map { dataSource -> dataSource.data }
                    .flatMap{ data ->
                        Observable.from(data.roles.map { role ->
                            canInvite.execute(role.key).map { canInvite ->
                                role to canInvite
                            }
                        })
                    }

                    .compose { it -> Single.merge(it) }
                    .filter { it -> it.second == true}
                    .map { it -> it.first }
                    .toList()
                    .subscribe {

【问题讨论】:

    标签: android rx-java reactive-programming rx-android rx-kotlin


    【解决方案1】:

    在我看来,这是一个更清晰的解决方案:

    fetchProductList()
        .map { dataSource -> dataSource.data }
        .flatMap { data ->
            Observable.fromIterable(data.roles)
                .flatMapMaybe { role ->
                    canInvite.execute(role.key)
                        .flatMapMaybe { result ->
                            if (result) Maybe.just(role) else Maybe.empty()
                        }
                }
        }
        .toList()
        .subscribe { result -> println(result) }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多