这是一个有点人为的例子,但请耐心等待。让我们说我有一个方法,如:
Single<String> getValue(int offset);
我想多次调用它,每次都传递一个不同的偏移量,但偏移量是基于先前返回的字符数。
所以也许getValue(0)
会返回&#34; Cat&#34;。然后因为它返回了3个字符,我想调用getValue(3)
,这可能会返回&#34; Horse&#34;。然后统计返回的字符数,我的下一个电话将是getValue(8)
。
Observable.generate(initialState, generator)
状态是偏移量似乎没有给我我想要的东西,因为它要求我的发电机返回下一个状态,我不一定知道。< / p>
我如何创建一个生成如上所述值的Observable?
答案 0 :(得分:0)
我有兴趣看看是否有更简洁的解决方案,但这就是我现在正在运行的内容:
我已经定义了一个&#34;州&#34;保存偏移量的类,并委托给实际的实现。这利用了generate
是同步的事实。
private static class State {
private final int offset = 0;
private final AnimalFetcher delegate;
State(AnimalFetcher delegate) { this.delegate = delegate; }
void getNextValue(Emitter<String> emitter) {
delegate.getValue(offset)
.doOnSuccess(animal -> offset += animal.size())
.subscribe(emitter::onNext, emitter::onError);
}
}
Observable<String> getAllTheAnimals() {
return Observable.generate(
() -> new State(this),
State::getNextValue
);
}