首页 > 解决方案 > 在 RxJava 中使用一个作为谓词组合两个可观察源

问题描述

我有 2 个可观察的来源,其中return和 other接受一个值并返回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 {

标签: androidrx-javareactive-programmingrx-androidrx-kotlin

解决方案


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

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) }

推荐阅读