merge() : 并行无序
concat() : 串行有序
amb() : 先发才收,其他不收
zip() : 有序,不完全(以最少数量)
示例:
//当你传递多个Observable给amb操作符时,该操作符只发射其中一个Observable的数据和通知:
// 首先发送通知给amb操作符的的那个Observable,
// 不管发射的是一项数据还是一个onError或onCompleted通知,amb将忽略和丢弃其它所有Observables的发射物
//给定多个Observable,只让第一个发射数据的Observable发射全部数据。
//谁先出发,就接收谁,其他都不接收
//ambWith和ambArray差不多,Observable.amb(o1,o2)和o1.ambWith(o2)是一样的效果。
@Test
public void testAmbArray() {
Observable o1 = Observable.just("a", "b", "c").delay(2000, TimeUnit.MILLISECONDS);
Observable o2 = Observable.just("=", "-", "*").delay(1000, TimeUnit.MILLISECONDS);
Observable o3 = Observable.just("1", "2", "3");
Observable observable = Observable.ambArray(o1, o2, o3);
Disposable disposable = observable.subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
System.out.println("accept: " + s);
}
});
}
//accept: 1
//accept: 2
//accept: 3
@Test
public void testAmbWith() {
Observable o1 = Observable.just("a", "b", "c").delay(2000, TimeUnit.MILLISECONDS);
Observable o2 = Observable.just("=", "-", "*").delay(1000, TimeUnit.MILLISECONDS);
Observable o3 = Observable.just("1", "2", "3");
Observable observable = o1.ambWith(o2).ambWith(o3);
Disposable disposable = observable.subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
System.out.println("accept: " + s);
}
});
}
//accept: 1
//accept: 2
//accept: 3