使用一个作为 RxJava 中的谓词来组合两个可观察源

Composing two observable sources using one as a predicate in RxJava

我有 2 个可观察来源,其中 fetchProductList() returns Observable<Datasource> 和其他 canInvite.execute() 取值,returns Single<Boolean>。我需要组成流,以某种方式将第一个源的每个排放馈送到第二个源,这样我就可以 return 来自 fetchProductList() 的所有排放,并将 true 值作为列表。我试着用这种方式编写它,但它看起来有点笨拙,有什么 better/simpler 方法可以做到吗?

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 {

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

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