Using rxjava2, I am attempting to create two infinite integer stream sequences, combine the sequences together in order to create pairs and print the result.
For a reason I don't understand, my code below creates an infinite loop when the zip function is being executed. It's like the zip function is waiting for both infinite sequences to complete before starting to emit items.
How can I make the below work?
E.g.:
My code is as follow:
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();
}
How can I make pageRange(5).take(5).doOnNext(pair -> System.out.println("left: "+pair.getLeft()+" right: "+pair.getRight())).subscribe(); print my values?
Thanks for your help.