Groovy 在RxJava中,如何从具有延迟的集合发出项?

Groovy 在RxJava中,如何从具有延迟的集合发出项?,groovy,rx-java,Groovy,Rx Java,我有下面的代码从集合中发出项目 // fills the given coll with some items and // returns the observable emitting the filled collection // does ASYNC work Observable<Collection> generate(Collection coll){ ... } def coll = [] generate(coll).flatMap({ filledColl -

我有下面的代码从集合中发出项目

// fills the given coll with some items and
// returns the observable emitting the filled collection
// does ASYNC work
Observable<Collection> generate(Collection coll){ ... }

def coll = []
generate(coll).flatMap({ filledColl ->
    rx.Observable.from(filledColl)
}).subscribe({ ... })
//用一些项和
//返回发出已填充集合的可观察对象
//异步工作吗
可观测生成(集合coll){…}
def coll=[]
生成(coll).flatMap({filledColl->
rx.可观测自(filledColl)
}).subscribe({…})
问题是这个集合可能包含数千个项,而且由于
generate
是异步工作的,所以这个代码几乎会立即调用subscribe方法数千次(这不是我在observer中所做的工作所需要的)

如何修改此代码以延迟从集合中发出项?
例如:发射100个项目,然后等待100毫秒,然后再发射100个项目,或者在发射下一个项目之前等待10毫秒?

在平面图中,您需要将
filledColl
拆分为更小的部分,延迟每个部分,并将它们合并为一个可观察对象,然后返回到平面图中

generate(coll).flatMap({ filledColl ->
    def chunkSize = 100
    resultStream = rx.Observable.never()
    for (i in 0 ..< filledCol.size()/chunkSize) {
        def chunk = filledCol[i*chunkSize .. (i+1)*chunkSize]
        resultStream = resultStream.mergeWith(
            rx.Observable.from(chunk).delay(100*i, TimeUnit.MILLISECONDS)
        )
    }
    resultStream
}).subscribe({ ... })
generate(coll).flatMap({filledColl->
def chunkSize=100
resultStream=rx.Observable.never()
对于(0中的i..

这只是一个粗略的想法,您可能仍然需要根据需要进行测试、调整和纠正。另外,将其移到generate函数中可能更有意义,但这取决于您,因为我不知道generate()中有什么内容。

您的意思是像buffer一样:是的,但buffer不会增加任何延迟;由于我可以立即从集合中获取所有项目,所以缓冲区不会改变任何东西(它只会发出分组/分块的数千个项目)。您能否创建自己的可观察对象,在调用onNext之前延迟?