Search code examples
javarx-javareactive-programming

RxJava2 .startWith(..) doesn't work


I have Observable what emit some String:

List<String> list = // size this list is 5
Observable o1 = Observable.fromArray(list.toArray());

and another one what emit one object per 10 second:

Observable intervalObservable = Observable.interval(10, TimeUnit.SECONDS);

I want to create Observable what every 10 second will emit every item from o1, so I did:

Observable change2tervalToString = intervalObservable.map(new Function() {
        @Override
        public Object apply(Object o) throws Exception {
            return "STARTER!";
        }
    });

Observable per10sec = o1.startWith(change2tervalToString);

If I .subscribe() to per10sec it doesn't emit something like:

"STARTER", "ITEM_FROM_LIST1", "ITEM_FROM_LIST2", "ITEM_FROM_LIST3"...

but only (every 10 second):

"STARTER"

I want to achive something like this:

"STARTER", "ITEM_FROM_LIST1", "ITEM_FROM_LIST2", "ITEM_FROM_LIST3"...
....
....
 10 sec
....
....
"STARTER", "ITEM_FROM_LIST1", "ITEM_FROM_LIST2", "ITEM_FROM_LIST3"...
....
....
....

Solution

  • How about this:

    Observable.interval(10, TimeUnit.SECONDS).flatMap(new Function<Long, ObservableSource<String>>() {
                @Override
                public ObservableSource<String> apply(Long aLong) throws Exception {
                    return Observable.fromIterable(list);
                }
            });