簡體   English   中英

RxJava Observable/Flowable 上的運算符將發射延遲 n 項

[英]Operator on RxJava Observable/Flowable to delay emission by n items

我想轉換一個Flowable以便它推遲發射項目,直到收集到指定數量的項目,然后以 FIFO 順序將它們發射到下游,保持恆定的延遲項目計數。 一旦上游發出 onComplete 信號,排隊的項目應該在發出 onComplete 之前被刷新到下游:

(在本例中延遲項目編號為 3)

1 2 3 4 5 6 7 |
      1 2 3 4 5 6 7 |

我沒有看到任何現有的運營商這樣做或可以修改以獲得該行為。 Observable.delay似乎只支持基於時間的延遲,不支持基於計數的延遲。

實現自定義運算符來實現這一點應該很容易,但也許現有運算符有更簡單的方法?

您可以發布一個序列,跳過最后 N,然后追加最后 N:

Flowable.range(1, 7)
    .flatMap(v -> Flowable.timer(v * 200, TimeUnit.MILLISECONDS).map(w -> v))
    .doOnNext(v -> System.out.println(v))
// -------------------------------------------------------------------
    .publish(f -> 
        f.skipLast(3).mergeWith(f.takeLast(3))
    )
// -------------------------------------------------------------------
    .blockingSubscribe(v -> System.out.println("<-- " + v));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM