如何将此rxjava / rxkotlin flatMap转换为lambda表达式?

时间:2018-02-12 18:57:09

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

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

2 个答案:

答案 0 :(得分:3)

应该这样做。

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

答案 1 :(得分:1)

实际上,不需要return@flatMap,因此下面的方法也适用。另外,如果您不需要为实际实现的订阅者使用所有方法,那么仅onNextonError就会有一个重载。 IDE的提示在这里有很大帮助-在输入方法时,按 Ctrl + P,它将显示可用的重载。键盘快捷键实质上是“ 显示参数”。

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