@Test
public void ObservableZip() throws InterruptedException {
Observable<Integer> ob1 = Observable.unsafeCreate(i -> { //ObservableZip将两个Observable发送的消息合成一个
try { //被观察者1 发1,2,3,4
System.out.println(1); //被观察者2 发A,B,C
i.onNext(1); //最终的结果可为1A,2B,3C (4是不发送收不到的,组合完了)
TimeUnit.SECONDS.sleep(1);
System.out.println(2);
i.onNext(2);
TimeUnit.SECONDS.sleep(1);
System.out.println(3);
i.onNext(3);
TimeUnit.SECONDS.sleep(1);
System.out.println(4);
i.onNext(4);
TimeUnit.SECONDS.sleep(1);
i.onCompleted();
System.out.println("onComplete");
} catch (Exception e) {
e.printStackTrace();
}
});
Observable<String> ob2 = Observable.unsafeCreate(i -> {
try {
System.out.println("A");
i.onNext("A");
TimeUnit.SECONDS.sleep(1);
System.out.println("B");
i.onNext("B");
TimeUnit.SECONDS.sleep(1);
System.out.println("C");
i.onNext("C");
i.onCompleted();
} catch (Exception e) {
e.printStackTrace();
}
});
Observer<String> o = new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(String o) {
System.out.println(o);
}
};
Observable<String> zip = Observable.zip(
ob1.subscribeOn(Schedulers.newThread()), //启新的线程同步发送数据
ob2.subscribeOn(Schedulers.newThread()),
new Func2<Integer, String, String>() {
@Override
public String call(Integer integer, String s) {
return integer + s;
}
});
zip.subscribe(o);
new Semaphore(0).acquire();
}
}
RxJAVA--Observable入门(二)
猜你喜欢
转载自blog.csdn.net/jaycegg/article/details/80976594
今日推荐
周排行