kotlin - RxJava2 如果元素当前存在于流中,则忽略它
问题描述
如果元素当前出现在反应流中,我需要删除/忽略元素。例如:
fun ignoreDuplicatesExample() {
val publishSubject: PublishSubject<Long> = PublishSubject.create()
publishSubject.observeOn(Schedulers.single()).distinct().subscribe({
Thread.sleep(1000)
println("onNext: $it")
}, {
error("$it")
})
publishSubject.onNext(1)
publishSubject.onNext(2)
publishSubject.onNext(3)
publishSubject.onNext(1) // should be ignored
publishSubject.onNext(2) // should be ignored
publishSubject.onNext(3) // should be ignored
Thread.sleep(10_000)
publishSubject.onNext(1) // by this time it should be already consumed, so it need to be allowed to emit it again
publishSubject.onNext(4)
Thread.sleep(10_000)
println("exit")
}
输出:
onNext: 1
onNext: 2
onNext: 3
onNext: 4
exit
但我希望看到:
onNext: 1
onNext: 2
onNext: 3
onNext: 1
onNext: 4
exit
那么,有人知道如何使用 RxJava2 来实现它吗?
解决方案
你不能直接做到这一点,因为上游链不应该知道下游,如果它是“消费”或不。(想象一下,如果有多个订阅者。)如果你想这样做,你需要与流之外的变量进行交互。
推荐阅读
- r - 逐行添加具有特定值的行
- docker - 部署角度后总是响应 nginx 索引
- python-3.x - 如何让 Pandas 数据框与 numpy 和 scipy 用户定义函数一起使用?
- javascript - 总和动态字段名称中始终显示零值
- android - 为什么我不能从 AsyncTask 访问全局变量?
- javascript - 重新加载页面反应
- azure-devops - VSTS\TFS 2017 Release 定义无法在“C:\Agents\DA_CID22\r1\a”处创建 Release 工件目录
- ms-access - Access-VBA - 使用 ConcatRelated 编译错误 - 以前工作过
- java - 我可以在 Android Studio 中使用 C# 吗?
- java - 使用未指定的索引