当前位置: 首页 > 知识库问答 >
问题:

RxJava缓冲-忽略零项

韦胜泫
2023-03-14

下面是我用来缓冲和转换传入事件的代码:

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的事件。

是否有一种方法来保持。缓冲区直到至少有一个对象?

注意:看起来有办法在C#中做到这一点(这里描述:https://stackoverflow.com/a/30090185/668148)。但是Java怎么做呢?

共有1个答案

谭裕
2023-03-14

正如马克·基恩所建议的那样,。distinctUntilChanged起作用。

因此,如果缓冲后有1项,以下代码将推送事件列表:

connectableObservable.toFlowable(BackpressureStrategy.BUFFER)
    .filter(event -> event.getId().equals(eventId))
    .buffer(1, TimeUnit.SECONDS, 50)
    .distinctUntilChanged()             // <<<======  
    .map(eventsMapper::mapCollection);
 类似资料:
  • 主要内容:RxJava Buffering缓冲 介绍,RxJava Buffering缓冲 示例RxJava Buffering缓冲 介绍 缓冲运算符允许将 Observable 发出的项目收集到列表或包中,并发出这些包而不是项目。在下面的示例中,我们创建了一个 Observable 来发出 9 个项目,并且使用缓冲,3 个项目将一起发出。 RxJava Buffering缓冲 示例 输出结果为:

  • 我正在学习RXJava的基础知识。正如您所看到的,我有一个小方法,它只检查两个整数是否相等,并以单个的形式返回结果 我收到一条警告消息,显示: 我怎样才能以一种适当的方式摆脱这个?

  • 使用RxJava,我需要将一个项目流缓冲到3个组中,但如果传入项目之间的间隔超过500ms,则刷新缓冲区。 bufferWithTimeOrCount()操作符正是我想要的,但它似乎只针对RxJS和Rx实现。NET,我需要使用RxJava来实现这一点。 是否有方法复制bufferWithTimeOrCount()的行为,并获得我对现有RxJava 1的期望。x运算符? 尝试每隔500毫秒发出一个新

  • 问题内容: 我是Java的新手。我想做一个游戏。经过大量研究,我不了解缓冲策略的工作原理。.我了解基础知识..它创建了一个屏幕外图像,您以后可以将其放入Windows对象中。 我不知道..我已经研究了很长时间了..根本没有运气..我不知道..也许所有的东西都在里面,而且它很清楚很简单,我我太愚蠢而看不见.. 感谢所有的帮助.. :) 问题答案: 运作方式如下: 该构造了一个当你调用。该知道它属于那

  • 我的目标是从现有数据框中的两列坐标创建一个地理数据框,获取1677个地理点,并在每个点周围添加一个缓冲圈,然后将生成的多边形合并成一个多多边形。我一直围绕着轴的地方是geopandas的.buffer()部分,它似乎没有使用我选择的CRS的度量单位。 到目前为止还不错,让我们看看我得到了什么: 它没有CRS,所以我给它分配了一个与我正在做的工作相关的: 它似乎已经“添加”了我添加的CRS,并且只是

  • 问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc