Rxjava温故知新(六)------RxJava合并型操作符

1.操作符列表

  • startWith
  • concatWith
  • merge
  • zip

2.操作符案例

2.1 startWith

说明

在这里插入图片描述

先发射 2和3,然后再通过startWith(1),最后输出 1, 2 3 .说明startWith中的内容先输出

例子

 Observable.just(4)
            .startWith(3)
            .startWith(2)
            .startWith(1)
            .subscribe(new Consumer<Integer>() {
                @Override
                public void accept(Integer integer) throws Exception {
                    Log.i(TAG, "accept: "+integer);
                }
            });

输出结果(先发射离订阅最近的一个startWith里面的内容)

I/MainActivity: accept: 1
I/MainActivity: accept: 2
I/MainActivity: accept: 3
I/MainActivity: accept: 4

2.1 concatWith

说明

和startWith相反,先执行发射的数据,然后再发射concatWith里面的数据

例子

如上诉,不特别举例了。

2.1 merge

合并操作符,合并多个操作符为一个数据源同时发送

例子

Observable<Long> interval1 = Observable.interval(0, 1, TimeUnit.SECONDS);
    Observable<Long> interval2 = Observable.interval(0, 1, TimeUnit.SECONDS);
    Observable.merge(interval1, interval2).subscribe(new Consumer<Long>() {
        @Override
        public void accept(Long aLong) throws Exception {
            Log.i(TAG, "accept: "+aLong);
        }
    });

输出结果 (这里需要注意的是输出时间,都是同一时间发出的)

10-24 08:23:26.831 I/MainActivity: accept: 0
10-24 08:23:26.831 I/MainActivity: accept: 0
10-24 08:23:27.831 I/MainActivity: accept: 1
10-24 08:23:27.831 I/MainActivity: accept: 1
10-24 08:23:28.831 I/MainActivity: accept: 2
10-24 08:23:28.831 I/MainActivity: accept: 2
10-24 08:23:29.831 I/MainActivity: accept: 3
10-24 08:23:29.831 I/MainActivity: accept: 3
10-24 08:23:30.831 I/MainActivity: accept: 4
10-24 08:23:30.831 I/MainActivity: accept: 4
10-24 08:23:31.831 I/MainActivity: accept: 5
10-24 08:23:31.831 I/MainActivity: accept: 5

2.2 zip

说明

zip ,将上游所有的发射结果通过function处理以后统一返回给下游,比如一个页面需要调用多个接口才能渲染界面,则可以通过此方式处理
,当数据全部得到以后再次渲染界面。不用等到一个接口完成以后再次调用另一个接口

在这里插入图片描述

例子

 Observable.zip(getIPAddress("www.baidu.com"), getIPAddress("www.sina.com"), new BiFunction<String, String, String>() {
        @Override
        public String apply(String s, String s2) throws Exception {
            return "s1  " + s + ", s2  = " + s2;
        }
    }).subscribe(new Observer<String>() {
        @Override
        public void onSubscribe(Disposable d) {
            Log.i(TAG, "onSubscribe: ");
        }

        @Override
        public void onNext(String s) {
            Log.i(TAG, "accept: " + s);
        }

        @Override
        public void onError(Throwable e) {
            Log.i(TAG, "onError: "+e);
        }

        @Override
        public void onComplete() {
            Log.i(TAG, "onComplete: ");
        }
    });

输出结果

I/MainActivity: onSubscribe: 
I/MainActivity: accept: s1  www.baidu.com => 180.101.49.12, s2  = www.sina.com => 115.238.192.240
I/MainActivity: onComplete: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值