具有自定义计数标准的RxJava缓冲区/窗口

时间:2018-10-13 09:53:10

标签: kotlin rx-java rx-java2

我有一个Observable,它发出许多对象,我想使用windowbuffer操作对这些对象进行分组。但是,我希望能够使用自定义条件,而不是指定count参数来确定窗口中应包含多少个对象。

例如,假设可观察对象正在发出Message类的实例,如下所示。

class Message(
   val int size: Int
)

我想基于消息实例size而不是其计数来缓冲或窗口化消息实例。例如,要获取总大小最大为5000的消息窗口。

// Something like this
readMessages()
    .buffer({ message -> message.size }, 5000)

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:3)

首先,我必须承认,我不是RxJava专家。 我刚刚发现您的问题具有挑战性,并试图找到解决方案。

有一个带有参数window()的{​​{1}}函数。如果达到窗口大小,则必须创建一个boundaryIndicator / Publisher来发出一个项目。

在该示例中,我创建了一个对象Flowable,该对象用作windowManager。在boundaryIndicator回调中,我调用onNext并给它机会打开一个新窗口。

windowManager