这是我用于缓冲和转换传入事件的代码:
public Publisher<Collection<EventTO>> logs(String eventId) {
ConnectableObservable<Event> connectableObservable = eventsObservable
.share().publish();
connectableObservable.connect();
connectableObservable.toFlowable(BackpressureStrategy.BUFFER)
.filter(event -> event.getId().equals(eventId))
.buffer(1, TimeUnit.SECONDS, 50)
.map(eventsMapper::mapCollection);
}
这里的问题是Flowable
每秒返回一个空列表,尽管没有事件发布到eventsObservable
。
有没有办法握住.buffer
直到至少有一个物体?
注意: 看起来有一种方法可以用C#(此处描述:https://stackoverflow.com/a/30090185/668148)进行。 但是如何用Java完成呢?
答案 0 :(得分:0)
如马克·基恩(Mark Keen)所建议,.distinctUntilChanged
可以解决问题。
因此,如果缓冲后有1个以上项目,则以下代码将推送事件列表:
connectableObservable.toFlowable(BackpressureStrategy.BUFFER)
.filter(event -> event.getId().equals(eventId))
.buffer(1, TimeUnit.SECONDS, 50)
.distinctUntilChanged() // <<<======
.map(eventsMapper::mapCollection);