过滤rxjava不起作用

时间:2017-12-01 00:56:20

标签: android kotlin rx-java

我最近在学习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()
        }
    })
}

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

1 个答案:

答案 0 :(得分:1)

问题是您使用的是原始observable2,而不是已过滤的filterObservable函数不会修改调用它的val filteredObservable2 = observable2.filter { i -> i % 2 == 0 } tvText.setOnClickListener { filteredObservable2.subscribe(object: Subscriber<Int>() { /*...*/ } } ,而是返回一个新函数。

因此,要修复代码,请将过滤结果保存到新变量中,然后使用它而不是原始的observable:

LA=[[1,2],[2,7],[4,5],[1,9],[6,5],[4,3],[2,1],[2,2]]

new_dict = {}
for (key, value) in LA:
    if key in new_dict:
        new_dict[key].append(value)
    else:
        new_dict[key] = [value]


for key, value in new_dict.items():

    new_dict[key] = (sum(value))

dictlist = []

for key, value in new_dict.items():
    temp = [key,value]
    dictlist.append(temp)

print(dictlist)