Вот забавная проблема с 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» против элемента управления, он выдает String
«Привет» после 200 мс без ввода. Но если я хочу, чтобы это было действительно более отзывчивым, у меня действительно должно быть какое-то скользящее накопление для каждого ввода нажатия клавиши. Тогда мой вывод консоли действительно должен выглядеть следующим образом:
H
He
Hel
Hell
Hello
Тех должен быть всеми моими выбросами, когда я ввожу слово «Hello», и 200мс определяет, сколько времени должно пройти до накопления возвратов. Как мне это сделать?
Это чувствует себя ближе к решению, но по-прежнему получать отсрочку до того, как выбросы случаются ... – tmn
Nice :) теперь, кажется, вы нашли решение. !! Как вы ответили. –
Спасибо за вашу помощь. Это заставило меня начать, и сегодня я решил заняться прохождением давления в первый раз. – tmn