rxjava2 - how to create an infinite integer sequence generator?

449 views
Skip to first unread message

simon trudeau

unread,
May 26, 2017, 4:29:06 PM5/26/17
to RxJava
I have posted this question on stackoverflow but so far no answers... :)


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.:

  • seq1 = 1, 2, 3,...,infinite
  • seq2 = 5, 10, 15,...,infinite
  • zip(seq1, seq2)= (1,5), (2,10), (3,15),..., infinite

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.

simon trudeau

unread,
May 27, 2017, 11:05:31 AM5/27/17
to RxJava
Following feedback from @akarnokd, using Flowable instead of Observable solves the issue.

See working answer at stackoverflow:
Reply all
Reply to author
Forward
0 new messages