我最近在学习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()
}
})
}
问题是过滤器无法正常工作。吐司显示所有数字。我的代码出了什么问题?
答案 0 :(得分:1)
问题是您使用的是原始observable2
,而不是已过滤的filter
。 Observable
函数不会修改调用它的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)