从另一个可观察到的流中提取LIFO数据发射?

时间:2018-12-20 10:32:50

标签: java android rx-java rx-java2 rx-android

我有来自可观察对象的数据流,我想拉动触发器并捕获最后一个发射,然后丢弃其余的发射。我基本上只希望在单击按钮时才能看到流。有些事情很接近,例如skipWhile,combinateLatest和使用valve和bufferWhile的akarnokd的rxExtension库,但是每一个都以某种方式失败。

我只想在按下按钮时查看流中的排放,它应该是最后一个排放。我想要的数据也不应等待流再次发出,而当我按下按钮时,只需立即向我提供该流的缓冲的最后一次发出。

此外,最后捕获的发射仅应使用一次。如果在抓取并使用了最后一个数据流之后,第一个数据流没有任何数据发出,则后续触发器不应重用该最后一个数据发送。

可能吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用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 */);

您可能必须插入一个很小的超时来处理无排放的情况。