使用rxjava2,我试图创建两个无限整数流序列,将序列组合在一起以创建对并打印结果。
由于我不明白的原因,我的代码在执行zip函数时会创建一个无限循环。就像zip函数在开始发出项目之前等待无限序列完成一样。
如何进行以下工作?
E.g:
我的代码如下:
public Observable<Integer> intervalSequence(int start, int step)
{
return Observable.generate(()->start,
(s, emitter)->{
int next = s+step;
emitter.onNext(next);
return next;
});
}
public Observable<Pair<Integer, Integer>> pageRange(int pageSize){
Observable<Integer> from = intervalSequence(1, pageSize);
Observable<Integer> to = intervalSequence(pageSize, pageSize);
Observable<Pair<Integer, Integer>> fromTo = Observable.zip(from, to, (f, t) -> {
return Pair.of(f, t);
});
return fromTo;
}
@Test
public void pageRangeTest() throws Exception {
//works
intervalSequence(1, 5).take(5).doOnNext(nmb -> System.out.println(nmb)).subscribe();
//Doesn't work
pageRange(5).take(5).doOnNext(pair -> System.out.println("left: "+pair.getLeft()+" right: "+pair.getRight())).subscribe();
}
如何让pageRange(5).take(5).doOnNext(pair -> System.out.println("left: "+pair.getLeft()+" right: "+pair.getRight())).subscribe();
打印我的值?
感谢您的帮助。
答案 0 :(得分:0)
根据@akarnokd的反馈,使用Flowable
代替Observable
解决了问题。使用Flowable
,工作代码为:
public Flowable<Integer> intervalSequence(int start, int step)
{
return Flowable.generate(()->start,
(s, emitter)->{
int next = s+step;
emitter.onNext(next);
return next;
});
}
public Flowable<Pair<Integer, Integer>> pageRange(int pageSize){
Flowable<Integer> from = intervalSequence(1, pageSize);
Flowable<Integer> to = intervalSequence(pageSize, pageSize);
Flowable<Pair<Integer, Integer>> fromTo = Flowable.zip(from, to, (f,
t) -> {
return Pair.of(f, t);
});
return fromTo;
}
@Test
public void pageRangeTest() throws Exception {
pageRange(5).take(5).doOnNext(pair -> System.out.println("left: "+pair.getLeft()+" right: "+pair.getRight())).subscribe();
}