【问题标题】:How can I convert this rxjava/rxkotlin flatMap into lambda expression?如何将此 rxjava/rxkotlin flatMap 转换为 lambda 表达式?
【发布时间】:2018-02-12 18:57:09
【问题描述】:
    Observable.just(1)
            .flatMap(object : Function<Int, Observable<Int>> {
                override fun apply(integer: Int): Observable<Int> {
                    return Observable.just(integer * 10)
                }
            })
            .flatMap(object : Function<Int, Observable<Int>> {
                override fun apply(integer: Int): Observable<Int> {
                    return Observable.just(integer * 20)
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<Int> {
                override fun onComplete() {
                }

                override fun onSubscribe(d: Disposable) {
                }

                override fun onNext(t: Int) {
                    Log.d("result", "" + t)
                }

                override fun onError(e: Throwable) {
                    e.printStackTrace()
                }
            })

【问题讨论】:

    标签: android lambda rx-java flatmap rx-kotlin


    【解决方案1】:

    应该这样做。

    Observable.just(1)
            .flatMap { 
                return@flatMap Observable.just(it*10)
            }.flatMap { 
                return@flatMap Observable.just(it*20)
            }.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                //OnNext
               Log.d("result", "" + it)
            },{
              it.printStackTrace()
                //on error
            },{
                //on complete
            })
    

    【讨论】:

      【解决方案2】:

      实际上,return@flatMap 是不需要的,所以下面也可以。此外,如果您不需要实际实现的订阅者的所有方法,那么只有onNextonError 会出现过载。 IDE 的提示在这里很有帮助——当输入一个方法时,按 Ctrl+P 它将显示可用的重载。键盘快捷键本质上是“show me arguments”。

          Observable.just(1)
              .flatMap { Observable.just(it * 10) }
              .flatMap { Observable.just(it * 20) }
              .subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(
                      { Log.d("result", "" + it) },
                      { it.printStackTrace() }
                        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2016-02-10
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多