rxjava学习笔记(二)zip操作符、Flowable

zip操作符

将多个Observable发送的消息通过一个函数合并到一起后发送,需注意:
zip操作符将消息合并后将按顺序应用该函数并发送

创建一个被观察者observable1,让其运行在io线程,且没发送一次数据都让线程休眠1s

        //创建一个observable1
        Observable observable1 = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception {
                e.onNext(1);
                java.lang.Thread.sleep(1000);
                Log.d("xy:: ",1+"");
                e.onNext(2);
                java.lang.Thread.sleep(1000);
                Log.d("xy:: ",2+"");
                e.onNext(3);
                java.lang.Thread.sleep(1000);
                Log.d("xy:: ",3+"");
                e.onNext(4);
//                java.lang.Thread.sleep(1000);
                Log.d("xy:: ",4+"");
                e.onComplete();
                Log.d("xy:: ","onComplete1");
            }
        }).subscribeOn(Schedulers.io());

同上,创建一个被观察者observable2

        //创建一个observable2
        Observable observable2 = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("A");
                java.lang.Thread.sleep(1000);
                Log.d("xy:: ","A");
                e.onNext("B");
                java.lang.Thread.sleep(1000);
                Log.d("xy:: ","B");
                e.onNext("C");
                java.lang.Thread.sleep(1000);
                Log.d("xy:: ","C");
                e.onComplete();
                Log.d("xy:: ","onComplete2");
            }
        }).subscribeOn(Schedulers.io());

把observable1和observable2应用zip操作符后,观察者接收到的数据为应用该函数后合并的数据。可应用到非单次请求即可获取全部页面数据的场景。

        //把observable1和observable2应用zip操作符
        Observable.zip(observable1, observable2, new BiFunction<Integer, String, String>() {
            @Override
            public String apply(Integer integer, String s) throws Exception {
                return integer + s;
            }
        }).subscribe(new Observer<String>() {
            private Disposable disposable;

            @Override
            public void onSubscribe(Disposable d) {
                disposable = d;
            }

            @Override
            public void onNext(String value) {
                Log.d("xy:: ", value );
            }

            @Override
            public void onError(Throwable e) {
                Log.d("xy:: ", "onError" );
            }

            @Override
            public void onComplete() {
                Log.d("xy:: ", "onComplete" );
            }
        });

Flowable

Flowable采取响应式拉取的方式解决‘被观察者发送消息’与‘观察者接收消息’不同步问题

 使用Flowable发送数据,Subscriber接收数据,Flowable中至多可存储128条消息,Subscriber的接收方法中调用Subscription的   request方法会接收一次数据,参数为接收数量。

io.reactivex.Flowable<Integer> flowable = io.reactivex.Flowable.create(new FlowableOnSubscribe<Integer>() {
            @Override
            public void subscribe(FlowableEmitter<Integer> e) throws Exception {
                for( int i = 0;;i++ ){
                    e.onNext( new Integer(i) );
                }
            }
        }, BackpressureStrategy.ERROR).subscribe(new Subscriber<Integer>() {

            @Override
            public void onSubscribe(Subscription s) {
                s.request(Long.MAX_VALUE);
                Log.d("xy:: ", "onSubscribe");
            }

            @Override
            public void onNext(Integer integer) {
                Log.d("xy:: ", "onNext: " + integer);

            }

            @Override
            public void onError(Throwable t) {
                Log.w("xy:: ", "onError: ", t);
            }

            @Override
            public void onComplete() {
                Log.d("xy:: ", "onComplete");
            }
        };

 已然沦落为业内最低端的人还是要多学习。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值