我最近学习RxJava。我正在学习操作员。这是我的代码:

tvText = findViewById(R.id.tvText)

val observable2 = Observable.just(1, 2, 3, 4, 5, 6)
observable2.filter { i ->
    //filter genap
    i!!
    i % 2 == 0
}

tvText.setOnClickListener {
    observable2.subscribe(object: Subscriber<Int>() {
        override fun onNext(t: Int?) {
            Toast.makeText(this@MainActivity, t.toString(), Toast.LENGTH_SHORT).show()
        }

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

        override fun onCompleted() {
            Toast.makeText(this@MainActivity, "Complete", Toast.LENGTH_SHORT).show()
        }
    })
}

问题是过滤器无法正常工作。吐司显示所有数字。我的代码有什么问题?

最佳答案

问题是您使用的是原始的observable2,而不是经过过滤的代码。 filter函数不会修改调用的Observable,而是返回一个新的ojit_code。

因此,要修复您的代码,请将过滤器结果保存到新变量中,并使用它代替原始的可观察到的变量:

val filteredObservable2 = observable2.filter { i ->
    i % 2 == 0
}

tvText.setOnClickListener {
    filteredObservable2.subscribe(object: Subscriber<Int>() {
        /*...*/
    }
}

10-08 03:07