【问题标题】:How to use RxJava2 combineLatest with a list of observables in Kotlin如何将 RxJava2 combineLatest 与 Kotlin 中的可观察对象列表一起使用
【发布时间】:2017-12-23 15:40:44
【问题描述】:

我知道如何在RxJava 2 中执行此操作。

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

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

【问题讨论】:

  • 这是Iterable<Observable<T>> 的扩展功能。做listOfObservables.combineLatest { ... }
  • 就是这样,谢谢。你可以写一个答案。

标签: kotlin rx-java2 rx-kotlin2


【解决方案1】:

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

listOfObservables.combineLatest { ... }

【讨论】:

    【解决方案2】:

    对于 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
    
        }
    

    【讨论】:

      【解决方案3】:
      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 中的登录也将根据需要进行更改。

      【讨论】:

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