我有来自可观察对象的数据流,我想拉动触发器并捕获最后一个发射,然后丢弃其余的发射。我基本上只希望在单击按钮时才能看到流。有些事情很接近,例如skipWhile,combinateLatest和使用valve和bufferWhile的akarnokd的rxExtension库,但是每一个都以某种方式失败。
我只想在按下按钮时查看流中的排放,它应该是最后一个排放。我想要的数据也不应等待流再次发出,而当我按下按钮时,只需立即向我提供该流的缓冲的最后一次发出。
此外,最后捕获的发射仅应使用一次。如果在抓取并使用了最后一个数据流之后,第一个数据流没有任何数据发出,则后续触发器不应重用该最后一个数据发送。
可能吗?谢谢。
答案 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 */);
您可能必须插入一个很小的超时来处理无排放的情况。