rxjava : mergeArray 、 mergeArrayDelayError

参考:

RxJava合并Observable——merge和mergeDelayError操作符

示例:



public void mergeArray() {
    Observable[] array = getObservables();
    Observable.mergeArray(array)
            .subscribe(getObserver());
}
//======onSubscribe=======
//======onNext o=======1
//======onNext o=======2
//======onNext o=======3
//======onNext o=======4
//======onError 总=======--error2--
//异常后正常数据立即终止发送



//mergeDelayError在合并和交错输出上和merge一样,
// 但是mergeDelayError的原始observable出现onError时,错误通知会被保留,
// 直到所有数据发射完毕后才执行onError。如果有多个原始observable出现了onError,
// 这些onError通知会被合并成一个CompositeException ,
// 保留在它的 List<Throwable> exceptions异常列表里。
// 如果只有一个原始observable出现了onError,
// 则会直接使用这个onError通知,而不会生成CompositeException。
public void mergeArrayDelayError() {
    Observable[] array = getObservables();
    Observable.mergeArrayDelayError(array)
            .subscribe(getObserver());
}
//======onSubscribe=======
//======onNext o=======1
//======onNext o=======2
//======onNext o=======3
//======onNext o=======4
//======onNext o=======5
//======onNext o=======6
//======onNext o=======7
//======onNext o=======8
//======onNext o=======9
//======onError each=======--error1--
//======onError each=======--error2--
//======onError 总=======2 exceptions occurred.
//正常数据都会走完,异常总是在最后,而且合并后走onError




private Observable[] getObservables() {
    ArrayList<Observable> observables = new ArrayList<>();
    Observable observable1 = Observable.just(1, 2, 3)
            .subscribeOn(Schedulers.io())//注意:这里指定线程
            .observeOn(AndroidSchedulers.mainThread());
    Observable observable2 = Observable.just(4, 5, 6)
            .subscribeOn(Schedulers.io())//注意:这里指定线程
            .observeOn(AndroidSchedulers.mainThread());
    Observable observable3 = Observable.just(7, 8, 9)
            .subscribeOn(Schedulers.io())//注意:这里指定线程
            .observeOn(AndroidSchedulers.mainThread());
    Observable<Object> error1 = Observable.error(new Error("--error1--"))
            .subscribeOn(Schedulers.io())//注意:这里指定线程
            .observeOn(AndroidSchedulers.mainThread());
    Observable<Object> error2 = Observable.error(new Error("--error2--"))
            .subscribeOn(Schedulers.io())//注意:这里指定线程
            .observeOn(AndroidSchedulers.mainThread());
    observables.add(observable1);
    observables.add(error1);
    observables.add(observable2);
    observables.add(error2);
    observables.add(observable3);
    return observables.toArray(new Observable[observables.size()]);
}




private Observer getObserver() {
    return new Observer() {
        @Override
        public void onSubscribe(Disposable d) {
            System.out.println("======onSubscribe=======");
        }

        @Override
        public void onNext(Object o) {
            System.out.println("======onNext o=======" + o);
        }

        @Override
        public void onError(Throwable e) {
        	//CompositeException :
        	//如果有多个原始observable出现了onError,
        	//这些onError通知会被合并成一个CompositeException ,
        	//保留在它的 List<Throwable> exceptions异常列表里。
        	//如果只有一个原始observable出现了onError,
        	//则会直接使用这个onError通知,而不会生成CompositeException。
            if (e instanceof CompositeException) {
                CompositeException compositeException = (CompositeException) e;
                List<Throwable> exceptions = compositeException.getExceptions();
                if (exceptions != null && exceptions.size() > 0) {
                    for (int i = 0; i < exceptions.size(); i++) {
                        System.out.println("======onError each======="
                                + exceptions.get(i).getMessage());
                    }
                }
            }
            System.out.println("======onError 总=======" + e.getMessage());
        }

        @Override
        public void onComplete() {
            System.out.println("======onComplete=======");
        }
    };
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值