假設我有一個處理器,當按下按鈕時會發出一個布爾值,可以認爲這是一個切換。基於RxJava 2.X中的布爾門暫停和恢復觀察值?
boolean gateValue = true;
PublishProcessor<Boolean> gate = PublishProcessor.create();
view.onButtonClicked()
.subscribe(new Action1<Void>() {
@Override
public void call(final Void aVoid) {
gate.onNext(gateValue = !gateValue);
}
}));
我想這樣做是使用門的價值,暫停和恢復可觀察序列,緩衝發射值,而暫停。
我已經閱讀了很多,雖然看起來可能在其他語言的反應式擴展中,但RxJava似乎不支持它。
下面是我想達到的一個例子,它只是每秒輸出一個增量值。當我按下按鈕我所要的輸出停止,直到我再次按下它應該輸出兩次按鍵之間發出的每一個項目:
Flowable.interval(1, TimeUnit.SECONDS)
.bufferWhile(gate)
.flatMapIterable(longs -> longs)
.subscribe(new Consumer<Long>() {
@Override
public void accept(final Long aLong) throws Exception {
view.displayTime(aLong);
}
});
有誰知道的方式來實現這樣的事情?
編輯我已經寫了關於如何實現這一目標https://medium.com/@scottalancooper/pausing-and-resuming-a-stream-in-rxjava-988a0977b771#.gj7fsi1xk
這需要一個自定義操作符,並且我有一個可能的實現RxJava 1 [這裏](https://gist.github.com/akarnokd/1c54e5a4f64f9b1e46bdcf62b4222f08)。 – akarnokd
@akarnokd您是否知道RxJava 2足夠了解我是否可以輕鬆轉換它?我讀過創建自定義操作符是非常棘手的,所以我不認爲我處於該級別 –