识别在 RxJava 中的发射可观察对象

huangapple go评论64阅读模式
英文:

Identify emitting observable in RxJava

问题

我有一个Observable数组,每个Observable可能会产生相同的元素。然后,我使用flatMap()来合并所有的Observables,并订阅结果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)    // 合并所有Observables的输出
    .subscribe(item -> Log.i(TAG, "Item: " + item + " Observable id: ???"));

我需要如何更改代码,以便在subscribe()语句中确定哪个Observable发出了每个项目?

英文:

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&lt;Integer&gt; o1 = Observable.range(0, 5);
Observable&lt;Integer&gt; o2 = Observable.range(0, 5);
Observable&lt;Integer&gt; o3 = Observable.range(0, 5);
        
Observable.fromArray(o1, o2, o3)
     .flatMap(o -&gt; o)    // merge outputs from all observables
     .subscribe(item -&gt; Log.i(TAG, &quot;Item: &quot; + item + &quot; Observable id: ???&quot;));

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

答案1

得分: 1

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"));
英文:

How about:

Observable&lt;Item&gt; o1 = Observable.range(0, 5).map(i -&gt; new Item(i, &quot;o1&quot;));
Observable&lt;Item&gt; o2 = Observable.range(0, 5).map(i -&gt; new Item(i, &quot;o2&quot;));
Observable&lt;Item&gt; o3 = Observable.range(0, 5).map(i -&gt; new Item(i, &quot;o3&quot;));

huangapple
  • 本文由 发表于 2020年10月2日 00:14:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/64159341.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定