ここに楽しいRxJavaの問題があります。RxJava - バックプレッシャーキーボード入力?
RxJavaバックプレッシャー演算子を使用して、Googleが検索ページで行うのと同じように、入力中に入力された入力をすばやく検索したいと考えています。私はBackpressureのドキュメントを見て、これを思いついた(私はRxJavaFX/RxKotlinFXを使ってJavaFXを利用している)。
val myControl: Node = ...
val burstyMulticast = myControl.events(KeyEvent.KEY_TYPED).publish().refCount()
val burstyDebounced = burstyMulticast.debounce(200, TimeUnit.MILLISECONDS)
val burstyBuffered = burstyMulticast.buffer(burstyDebounced)
burstyBuffered
.flatMap { it.toObservable().map { it.character }.reduce("") { x,y -> x + y } }
.subscribe { println(it) }
これは素晴らしいです。コントロールに対して "Hello"と入力すると、200 msのタイピングがないとString
"Hello"が出力されます。しかし、これを本当により敏感にしたいなら、私は実際にはキーストローク入力ごとにある種のローリング累積を行うべきです。その後、私のコンソール出力は、実際にこのようになります。
H
He
Hel
Hell
Hello
私は単語「こんにちは」を入力し、200msのは、蓄積リセット前に経過する必要があり、どのくらいの時間を定義したときに、これらはすべて私の排出量でなければなりません。これはどうすればいいですか?
これは解決に近づきますが、排出が発生する前にまだ遅延が発生しています。 – tmn
ニース:)解決策が見つかったようです。あなたが答えたように。 –
あなたの助けをありがとう。それが私を始めてくれました。そして、私は今夜初めてバックプレッシャーを学ぶことに決めました。 – tmn