RxJava:在发出

时间:2017-05-16 14:16:41

标签: rx-java

我想知道哪个项目刚刚被阻塞的长时间运行的observable发出,它会发出数千个项目。下面的代码有效,但它创建了一个来自range()的巨大缓冲区。

sourceOservable
.zipWith(Observable.range(0, Integer.MAX_VALUE), (any, counter) -> counter)
.whatever(...)

有没有办法在不引入任何外部计数器字段的情况下避免这种行为?

1 个答案:

答案 0 :(得分:3)

缓冲区是由Observable.range引起的。它可能比sourceObservable更快地生成。它必须缓冲所有值,以便使用sourceObservable中的正确值进行压缩。

请看一下我的实施:

@Test
void stackoverflow44004014() {
    Observable.just("i", "b", "c")
            .scan(0, (counter, sourceValue) -> {
                return ++counter;
            })
            .skip(1)
            .test()
            .assertResult(1, 2, 3);
}