我想轉換我的源代碼Flowable的方式是,只有事件在特定時段內成爲第一個項目纔會發生。RxJava:只有在特定時間段內的第一個項目發出
也就是說,我想要第一個項目經過,然後刪除所有後續項目,直到有一段時間,比如10秒,其中沒有上游事件到達。
請注意,這是既不
debounce
:當且僅當它不是接着又一個10秒這將發出的每個項目 - 但這將迫使即使是第一項有10秒的延遲。我想立即發出第一個項目。throttleFirst
:這會發出第一個項目,然後在第一個項目之後放置所有後續項目10秒鐘。我希望在每個上游項目之後重置阻止時段。
我現在已經解決了它這樣的:
source
.flatMap { Flowable.just(1).concatWith(Flowable.just(-1).delay(10, TimeUnit.SECONDS)) }
.scan(0, { x, y -> x + y })
.map { it > 0 }
.distinctUntilChanged()
.filter { it }
注:我不關心source
實際的項目,只是他們發生 - 但當然,我可能只是包裝Pair
中的項目以及1
或-1
)。
有沒有更簡單的方法來使用內置的RxJava(2)運算符來實現相同的目標?
聽起來像前一個問題:https://stackoverflow.com/questions/41964731/immediate-debounce-in-rx有針對HTTPS的擴展操作: //github.com/akarnokd/RxJava2Extensions#flowabletransformersdebouncefirst – akarnokd