1
A
答えて
0
私はbuffer(Duration)
があなたのニーズに合うだろうと思ったが、それはしていません。
編集:まったく同じ必要性を持つ人が、そのオペレータを使用するように誘惑されている場合は、このままにしてください。バッファのこの変形は、連続する時間ウィンドウ(それぞれがbuffer
を生成する)にシーケンスを分割する。つまり、新しいdelay
は、前のものの最後から開始します。新しい遅延のない要素が放出されるとは限りません。
1
これは、単純ではない組の演算子で実現できます。
import java.time.Duration;
import java.util.*;
import reactor.core.publisher.*;
public class DelayedBuffer {
public static void main(String[] args) {
Flux.just(1, 2, 3, 6, 7, 10)
.flatMap(v -> Mono.delayMillis(v * 1000)
.doOnNext(w -> System.out.println("T=" + v))
.map(w -> v)
)
.compose(f -> delayedBufferAfterFirst(f, Duration.ofSeconds(2)))
.doOnNext(System.out::println)
.blockLast();
}
public static <T> Flux<List<T>> delayedBufferAfterFirst(Flux<T> source, Duration d) {
return source
.publish(f -> {
return f.take(1).collectList()
.concatWith(f.buffer(d).take(1))
.repeatWhen(r -> r.takeUntilOther(f.ignoreElements()));
});
}
}
(予想される放射パターンが良好期限が関与しているにカスタムオペレータと一致させることができることは留意されたい。)
+0
ありがとう、それは私を助けましたが、これは私の必要性に合っています: .publish(f - > f.take(1).collectList() \t .concatWith(f.take(D).collectList() \t \t .filter(リスト! - > list.isEmpty()) \t \t .repeatWhen(R - > r.takeWhile(N - > N> 0)) ) \t .repeatWhen(r - > r.takeUntilOther(f.ignoreElements()))) –
関連する問題
- 1. リアクタ内のフラックスをシリアライズ
- 2. リアクタ認可
- 3. リアクタ・ルータonChangeフック
- 4. リアクタ・ルータOnChangeリダイレクト
- 5. リアクタ・レンダリング・イベント
- 6. リアクタのマッチミス
- 7. リアクタ・ルータ・パラメータ
- 8. リアクタ対プロクタ
- 9. isomorphic react.js without flux
- 10. Flux Utils MapStore
- 11. Clojure Storm Flux
- 12. リアクタ - ルータ - Reduxとリアクトブートストラップ
- 13. リアクタ2v対リアクタ3v - 違いは何ですか?
- 14. ワンアクション複数ストアリスナー - Flux
- 15. NavigationExperimentalとReact-native-Router-Flux
- 16. Typo3 7.6 Fluxバックエンドレイアウトの列タイトル
- 17. Redux/Flux(ReactJS付き)とアニメーション
- 18. リアクタ・ルータ - デフォルト・ルートなし
- 19. ユニット・テスト・ルートとリアクタ・ルータ2
- 20. リアクタ入力によるデバッガ
- 21. Fluidtypo3 Flux - テーブルフィールドに保存
- 22. Apache Storm Fluxの変更トポロジ
- 23. ReactJS + Flux - サブコンポーネントデータ用に保存
- 24. React-Flux Load初期状態
- 25. リアクタのナビゲーションが動作しません
- 26. リアクタのリンクを無視するには?
- 27. setstate警告を生成するリアクタ・ルータ
- 28. 固定レイアウトのSPAのリアクタの設定
- 29. リアクタを使用したオブジェクトプロパティのスタイリング
- 30. リアクタ・ルータのリンクが動作しない
なし、緩衝液で()遅延は、別の遅延が終了するたびに開始されます。現在の遅延がない場合は、各受信値にその値を設定し、値を返して遅延を開始するか、遅延が既に発生している場合はバッファリングする必要があります。 –
答えが残っていて、なぜそれが適合していないのかを明確にするために編集しました –