RxJAVA--Observable入门(二)

    @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();
    }
}

猜你喜欢

转载自blog.csdn.net/jaycegg/article/details/80976594