在线二区人妖系列_国产亚洲欧美日韩在线一区_国产一级婬片视频免费看_精品少妇一区二区三区在线

鍍金池/ 教程/ Android/ Merge
調(diào)度器 Scheduler
Empty/Never/Throw
Replay
這個頁面展示了創(chuàng)建Observable的各種方法。
ObserveOn
ReactiveX
TimeInterval
Window
本頁展示的操作符用于對整個序列執(zhí)行算法操作或其它操作,由于這些操作必須等待數(shù)據(jù)發(fā)射完成(通常也必須緩存這些數(shù)據(jù)),它們對于非常長
IgnoreElements
Distinct
Last
Start
And/Then/When
Switch
創(chuàng)建操作
Materialize/Dematerialize
CombineLatest
Catch
實現(xiàn)自己的操作符
StringObservable
Map
ConnectableObservable
Using
Take
BlockingObservable
TakeLast
Defer
RxJavaSchedulersHook
First
FlatMap
這個頁面的操作符可用于根據(jù)條件發(fā)射或變換Observables,或者對它們做布爾運算:
Do
Repeat
Serialize
這個頁面展示的操作符可用于過濾和選擇Observable發(fā)射的數(shù)據(jù)序列。
這個頁面列出了很多用于Observable的輔助操作符
Single
Retry
從錯誤中恢復(fù)的技術(shù)
Sample
Merge
算術(shù)和聚合操作
Range
Timestamp
RxJava Issues
From
Subscribe
Subject
Delay
Skip
SubscribeOn
Filter
按字母順序排列的全部操作符列表
Timeout
Scan
onError
Zip
RxJava文檔和教程
Publish
ElementAt
第一個例子
SkipLast
Just
Timer
Debounce
GroupBy
條件和布爾操作
這個頁面展示了可用于對Observable發(fā)射的數(shù)據(jù)執(zhí)行變換操作的各種操作符。
Introduction
rxjava-async
介紹響應(yīng)式編程
這個頁面展示的操作符可用于組合多個Observables。
ReactiveX
Connect
操作符分類
StartWith
Interval
Join
To
Buffer
RefCount
介紹
Observable

Merge

Merge

合并多個Observables的發(fā)射物

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/merge.c.png" alt="merge" />

使用Merge操作符你可以將多個Observables的輸出合并,就好像它們是一個單個的Observable一樣。

Merge可能會讓合并的Observables發(fā)射的數(shù)據(jù)交錯(有一個類似的操作符Concat不會讓數(shù)據(jù)交錯,它會按順序一個接著一個發(fā)射多個Observables的發(fā)射物)。

正如圖例上展示的,任何一個原始Observable的onError通知會被立即傳遞給觀察者,而且會終止合并后的Observable。

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/mergeDelayError.C.png" alt="mergeDelayError" />

在很多ReactiveX實現(xiàn)中還有一個叫MergeDelayError的操作符,它的行為有一點不同,它會保留onError通知直到合并后的Observable所有的數(shù)據(jù)發(fā)射完成,在那時它才會把onError傳遞給觀察者。

RxJava將它實現(xiàn)為merge, mergeWithmergeDelayError。

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/merge.png" alt="merge" />

示例代碼


Observable<Integer> odds = Observable.just(1, 3, 5).subscribeOn(someScheduler);
Observable<Integer> evens = Observable.just(2, 4, 6);

Observable.merge(odds, evens)
          .subscribe(new Subscriber<Integer>() {
        @Override
        public void onNext(Integer item) {
            System.out.println("Next: " + item);
        }

        @Override
        public void onError(Throwable error) {
            System.err.println("Error: " + error.getMessage());
        }

        @Override
        public void onCompleted() {
            System.out.println("Sequence complete.");
        }
    });

輸出

Next: 1
Next: 3
Next: 5
Next: 2
Next: 4
Next: 6
Sequence complete.

除了傳遞多個Observable給merge,你還可以傳遞一個Observable列表List,數(shù)組,甚至是一個發(fā)射Observable序列的Observable,merge將合并它們的輸出作為單個Observable的輸出:

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/merge.io.png" alt="merge" />

如果你傳遞一個發(fā)射Observables序列的Observable,你可以指定merge應(yīng)該同時訂閱的Observable'的最大數(shù)量。一旦達到訂閱數(shù)的限制,它將不再訂閱原始Observable發(fā)射的任何其它Observable,直到某個已經(jīng)訂閱的Observable發(fā)射了onCompleted通知。

merge是靜態(tài)方法,mergeWith是對象方法,舉個例子,Observable.merge(odds,evens)等價于odds.mergeWith(evens)。

如果傳遞給merge的任何一個的Observable發(fā)射了onError通知終止了,merge操作符生成的Observable也會立即以onError通知終止。如果你想讓它繼續(xù)發(fā)射數(shù)據(jù),在最后才報告錯誤,可以使用mergeDelayError

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/mergeDelayError.png" alt="merge" />

mergeDelayError behaves much like merge. The exception is when one of the Observables being merged terminates with an onError notification. If this happens with merge, the merged Observable will immediately issue an onError notification and terminate. mergeDelayError, on the other hand, will hold off on reporting the error until it has given any other non-error-producing Observables that it is merging a chance to finish emitting their items, and it will emit those itself, and will only terminate with an onError notification when all of the other merged Observables have finished.

Because it is possible that more than one of the merged Observables encountered an error, mergeDelayError may pass information about multiple errors in the onError notification (it will never invoke the observer’s onError method more than once). For this reason, if you want to know the nature of these errors, you should write your observers’ onError methods so that they accept a parameter of the class CompositeException.

mergeDelayError has fewer variants. You cannot pass it an Iterable or Array of Observables, but you can pass it an Observable that emits Observables or between one and nine individual Observables as parameters. There is not an instance method version of mergeDelayError as there is for merge.