这是一个有趣的 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”,它将String
在 200 毫秒无输入后发出“Hello”。但如果我想让它真正响应更快,我实际上应该为每个按键输入进行某种滚动累积。然后我的控制台输出应该看起来像这样:
H
He
Hel
Hell
Hello
当我输入“你好”这个词时,这些应该是我的全部排放,而 200 毫秒定义了在累积重置之前应该经过多长时间。我该怎么做呢?