说明:
merge 将两个及以上的可观察者,进行并行的发射
You can combine items emitted by multiple ObservableSources so that they appear as a single ObservableSource
方法预览:
//接收一个可观察者
public static <T> Observable<T> merge(ObservableSource<? extends ObservableSource<? extends T>> sources)
//接收两个可观察者
public static <T> Observable<T> merge(ObservableSource<? extends T> source1, ObservableSource<? extends T> source2)
//接收三个可观察者
public static <T> Observable<T> merge(ObservableSource<? extends T> source1, ObservableSource<? extends T> source2, ObservableSource<? extends T> source3)
//接收四个可观察者
public static <T> Observable<T> merge(ObservableSource<? extends T> source1, ObservableSource<? extends T> source2,ObservableSource<? extends T> source3, ObservableSource<? extends T> source4)
//接收一个集合,如arrylist
public static <T> Observable<T> merge(Iterable<? extends ObservableSource<? extends T>> sources)
从重载的方法可以看出,concat可以接收1到4个可观察者,或者一个可观察者的集合
例子:
public void merge(View view){
Observable observable1 = Observable.interval(1, TimeUnit.SECONDS)
.map(new Function() {
@Override
public Object apply(Object o) throws Exception {
return "A"+o;
}
});
Observable observable2 = Observable.interval(1,TimeUnit.SECONDS)
.map(new Function() {
@Override
public Object apply(Object o) throws Exception {
return "B"+o;
}
});
Observable.merge(observable1,observable2)
.subscribe(new Consumer<String>() {
@Override
public void accept(String o) throws Exception {
Log.e("RxTest","accept "+o);
}
});
}
打印结果:
accept B0
accept A0
accept A1
accept B1
accept A2
accept B2
accept A3
accept B3
accept A4
accept B4
accept A5
accept B5
accept A6
……
可以看出两个可观察者并行发射数据。