我正在尝试使用RxJava。我需要一个Observable
,它会产生一个HashSet<String>
。进入Observable
我想放弃Pair<String, Boolean>
false
布尔值从结果String
中删除HashSet
键的方式。这是我所拥有的代码片段:
private val selectionSubject = ReplaySubject.create<Pair<String, Boolean>>()
init {
selectionSubject.onNext(Pair("dd", false))
selectionSubject
.collect({HashSet<String>()}, {dest, value -> collectSelection(dest, value)})
.subscribe { t1, t2 -> Log.d(TAG, t1.toString())}
}
private fun collectSelection(dest: HashSet<String>, value: Pair<String, Boolean>): HashSet<String> {
if (value.second) {
dest.add(value.first)
} else {
dest.remove(value.first)
}
Log.d(TAG, "collectSelection, ${dest.toString()}")
return dest
}
在日志中我可以看到collectSelection
被调用但我的订阅者没有被调用。
如何解决?
答案 0 :(得分:2)
collect
在发出值之前等待来自上面的流的onComplete
事件。在您的情况下,ReplaySubject
永远不会结束,因此不会发出任何值。
在不知道selectionSubject
的背景下,我无法为您的问题提供解决方案,例如,它是否必须保持开放状态?如果onNext
次呼叫有限,您可以使用.take(X)
。如果必须保持打开状态,则您不应该依赖于收集,而是将HashSet
内的项目添加到.doOnNext