Rxjava2.0之compose操作符

compose操作符

用途

对Observable流进行整体的变换,一般用于把一个或多个操作符封装起来,便于复用

用法


        Observable.just(-1,0,1,2,3)
                .compose(positiveNumber())
                .compose(schedulersTransformer())
                .as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this)))
                .subscribe(new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {}

                    @Override
                    public void onNext(Integer value) {
                        LogTool.d("number --> " + value);
                    }

                    @Override
                    public void onError(Throwable e) {
                        LogTool.d("eeeeeeeeee");
                    }

                    @Override
                    public void onComplete() {}
                });

1.positiveNumber方法,如果有负数或0,直接抛异常。

// An highlighted block
private <T extends Integer> ObservableTransformer<T, T>  positiveNumber() {
        return upstream -> upstream.flatMap(it -> {
            if (it.intValue() > 0) {
                return Observable.just(it);
            } else {
                return observer -> {
                    observer.onError(new Exception());
                };
            }
        });
    }

2.schedulersTransformer方法,线程调度。

private <T> ObservableTransformer<T, T> schedulersTransformer() {
        return new ObservableTransformer<T, T>(){
            @Override
            public ObservableSource<T> apply(Observable<T> upstream) {
                return upstream.subscribeOn(Schedulers.io())
                               .observeOn(AndroidSchedulers.mainThread());
            }
        };
    }

说明

compose操作符接收一个ObservableTransformer对象,ObservableTransformer是一个接口,需要重写apply方法,apply方法接受一个Observable对象,返回一个ObservableSource对象,和flatmap操作符接收的Function对象很相似,都是重写apply方法。

/**
 * Interface to compose Observables.
 *
 * @param <Upstream> the upstream value type
 * @param <Downstream> the downstream value type
 */
public interface ObservableTransformer<Upstream, Downstream> {
    /**
     * Applies a function to the upstream Observable and returns an ObservableSource with
     * optionally different element type.
     * @param upstream the upstream Observable instance
     * @return the transformed ObservableSource instance
     */
    @NonNull
    ObservableSource<Downstream> apply(@NonNull Observable<Upstream> upstream);
}

特点

1.compose操作符是对流的整体操作,参数就是整个流
2.和flatmap操作符的区别:

  1. flatmap对流的每个参数做操作,compose是对这个流做操作,所以可以在compose中再做flatmap,如前面的positiveNumber方法;
  2. 执行时机的不同,flatmap是在onNext()被调用以后才会执行,compose则是立即执行;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值