У меня есть наблюдаемые события: ElementAdded (A), ElementRemoved (R), ActionStarted (S) и ActionFinished (F). Некоторые из добавлений и удалений зажаты между ActionStarted и ActionFinished. Я хочу заменить эту подпоследовательность событий одним событием ElementMoved (M), позволяя беззаботным образом летать без задержки. События ElementMoved должны содержать массив со всеми событиями, которые он заменяет. Вот пример:RxJava: подставить подпоследовательность элементов с одним элементом
---A--A--R--S-A-R-F-R-A-A--
(my transformation)
---A--A--R--------M-R-A-A--
ElementMoved должен появиться в тот момент, ActionFinished события.
Кроме того, если не ActionFinished событие не срабатывает после тайм-аута T после последнего зажатой события, то все оригинальные события должны стрелять вместо:
-----T
---A1--A2--R3--S4-A5-R6------------R7-A8-A9--
(my transformation)
---A1--A2--R3---------------S4A5R6-R7-A8-A9--
Там может быть ActionFinished событие, которое вызывается после тайм-аута или это никогда не произойдет (как в примере). Если этого не произойдет, нечего делать. Это происходит, и нет открытого окна, событие ActionFinished, чтобы самостоятельно входить в новый поток. Например:
-----T
---A1--A2--R3--S4-A5-R6------------F7-A8-A9--
(my transformation)
---A1--A2--R3---------------S4A5R6-F7-A8-A9--
В принципе, если преобразование не может закрыть окно в данном тайм-аут, он должен очистить все удержанные события нетронутым.
Эта вспышка событий также должна произойти, если новое событие S запускается перед соответствующим событием F. (Это новое событие S должно быть удержано в соответствии с приведенной выше логикой). Например,
---A1--A2--R3--S4-A5-R6--S7---R9-A9-A10-F11-A12--
(my transformation)
---A1--A2--R3------------S4A5R6---------M7- A12--
Я играл с оператором окна некоторое время без везения. Оператор буфера вводит задержку для свободно плавающих событий, что неприемлемо в моем случае. Сканирование испускает так много событий, как исходный поток, чего я не хочу. Я, конечно, потерян, поэтому любая помощь будет очень оценена.
Edit 1: Добавлено дело о промывке при появлении нового события S в то время как окно открыто
Edit 2: Уточнить, что двигают события должны содержать список событий, он заменяющие.
Edit 3: Измененный тег из приёмного Java ПРМ-java2
Редактировать 4:. Уточнить, что произойдет, если придет ActionFinished событие после тайм-аута пинков в
Спасибо!
Что произойдет, если у вас есть S A F или S R F, разрешены ли эти шаблоны? – akarnokd
Да, любая произвольная последовательность событий A и R между S и F допускается, включая ноль A и R событий. – luisobo
Сделано пару исправлений, см. Выше. – luisobo