RxJava缓冲-忽略零项

时间:2019-01-19 21:01:55

标签: java rx-java reactive-programming reactivex

这是我用于缓冲和转换传入事件的代码:

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完成呢?

1 个答案:

答案 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);