Срывать LIFO с передачи данных из потока из другого наблюдаемого? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть поток данных, поступающих из наблюдаемой, и я хочу нажать триггер и захватить последний выброс и сбросить остальные.Я в основном хочу смотреть на поток только когда я нажимаю кнопку.Некоторые вещи сближаются, например, skipWhile, CombinLatest и библиотека rxExtension akarnokd, использующая valve и bufferWhile, но каждая из них в некотором роде дает сбой.

Я хочу видеть выбросы из потока только при нажатии кнопки, и это должно бытьпоследний выпущен.Данные, которые я хочу, также не должны ожидать повторной передачи потока и просто дают мне буферизованную последнюю эмиссию из этого потока немедленно, когда я нажимаю кнопку.

Кроме того, последний захваченный выброс следует использовать только один раз.Если данные не передаются из первого потока после того, как последний был захвачен и использован, последующие триггеры не должны повторно использовать этот последний поток.

Возможно?Спасибо.

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете использовать оператор replay() для захвата последнего испущенного элемента и take(1) только для просмотра самого последнего элемента.

ConnectableObservable<String> srco = source.replay( 1 );
srco.connect();   // start the subscription
...
buttonClickObservable
  .flatMap( click -> srco
                       .take( 1 )
                       .last()
          )
  .subscribe( lastItem -> {},
              error -> { /* probably no item emitted */);

Возможно, вам придется вставить крошечный тайм-аут для обработкив случае отсутствия выбросов.

...