Search code examples
javarx-javareactivex

Identify emitting observable in RxJava


I have an array of Observable, each potentially producing the same elements. Then, I use flatMap() to merge all of the observables, and subscribe to the resulting Observable:

Observable<Integer> o1 = Observable.range(0, 5);
Observable<Integer> o2 = Observable.range(0, 5);
Observable<Integer> o3 = Observable.range(0, 5);
        
Observable.fromArray(o1, o2, o3)
     .flatMap(o -> o)    // merge outputs from all observables
     .subscribe(item -> Log.i(TAG, "Item: " + item + " Observable id: ???"));

How do I need to change the code so I can determine which Observable emitted each item in the subscribe() clause?


Solution

  • How about:

    Observable<Item> o1 = Observable.range(0, 5).map(i -> new Item(i, "o1"));
    Observable<Item> o2 = Observable.range(0, 5).map(i -> new Item(i, "o2"));
    Observable<Item> o3 = Observable.range(0, 5).map(i -> new Item(i, "o3"));