我想知道哪个项目刚刚被阻塞的长时间运行的observable发出,它会发出数千个项目。下面的代码有效,但它创建了一个来自range()
的巨大缓冲区。
sourceOservable
.zipWith(Observable.range(0, Integer.MAX_VALUE), (any, counter) -> counter)
.whatever(...)
有没有办法在不引入任何外部计数器字段的情况下避免这种行为?
答案 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);
}