3

我知道如何在RxJava 2中做到这一点。

而且我知道RxKotlin如何帮助解决类似的问题。

但似乎 RxKotlin.Observables 没有这个列表重载的辅助函数,我无法弄清楚。你会怎么做?

4

3 回答 3

6

RxJava 中的大多数静态函数都是 RxKotlin 中的扩展函数。此特定功能是Iterable<Observable<T>>. 你可以这样称呼它:

listOfObservables.combineLatest { ... }
于 2017-12-25T19:03:34.973 回答
6

对于 RxJava 2,这可以通过这种方式完成

    val list = Arrays.asList(
            remoteRepository.getHospitals(),
            remoteRepository.getQuestionCategories(),
            remoteRepository.getQuestions(),

    )


    return Observable.combineLatest(list) {

        val hospitals = it[0] as List<Hospital>

        val questionCategories = it[1] as List<QuestionCategory>
        val questions = it[2] as List<Question>


        localRepository.insertHospitals(hospitals)
        localRepository.insertQuestionCategories(questionCategories)
        localRepository.insertQuestions(questions)


        if (hospitals.isNotEmpty())
            Constants.STATUS_OK
        else
            Constants.STATUS_ERROR

    }
于 2018-12-12T19:50:43.030 回答
1
val list = Arrays.asList(Observable.just(1), Observable.just("2"))
Observable.combineLatest(list, object : FuncN<String>() {
    fun call(vararg args: Any): String {
        var concat = ""
        for (value in args) {
            if (value is Int) {
                concat += value
            } else if (value is String) {
                concat += value
            }
        }
        return concat
    }
})

Observable.just(1)、Observable.just("2") 可以替换为 observable 列表,并且调用 fun 中的登录也会根据需要进行更改。

于 2017-12-26T04:54:19.447 回答