RxJava系列专题(Android方向)rxjavarxjava

RxJava操作符(一)

2017-09-25  本文已影响286人  小白要超神

注:只包含标准包中的操作符,用于个人学习及备忘
参考博客:http://blog.csdn.net/maplejaw_/article/details/52396175

本篇将介绍rxjava中的创建操作、合并操作、过滤操作、条件/布尔操作、聚合操作、转换操作以及变换操作,只针对用法不涉及原理,对RxJava不熟悉的可参考:http://gank.io/post/560e15be2dca930e00da1083

创建操作

合并操作(用于组合多个Observavle)

merge工作流程
    Observable<Integer> observable1 = Observable.create(new Observable.OnSubscribe<Integer>() {
        @Override
        public void call(Subscriber<? super Integer> subscriber) {
            subscriber.onNext(1);
            SystemClock.sleep(1000);
            subscriber.onNext(2);
            subscriber.onNext(3);
            subscriber.onCompleted();
        }
    }).subscribeOn(Schedulers.computation());

    Observable<Integer> observable2 = Observable.create(new Observable.OnSubscribe<Integer>() {
        @Override
        public void call(Subscriber<? super Integer> subscriber) {
            SystemClock.sleep(500);
            subscriber.onNext(4);
            subscriber.onNext(5);
            SystemClock.sleep(1000);
            subscriber.onNext(6);
            subscriber.onCompleted();
        }
    }).subscribeOn(Schedulers.computation());

    Observable.merge(observable1, observable2)
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.d("debug", integer.toString()); //打印1,4,5,2,3,6
                }
            });
zip工作流程
    Observable<Integer> observable1 = Observable.just(1, 2, 3, 4, 5);
    Observable<String> observable2 = Observable.just("A", "B", "C", "D");
    Observable.zip(observable1, observable2, new Func2<Integer, String, String>() {
        @Override
        public String call(Integer integer, String s) {
            return integer + s;
        }
    }).subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            Log.d("debug", s);  //打印1A,2B,3C,4D
        }
    });
combineLatest工作流程
    Observable<Integer> observable1 = Observable.create(new Observable.OnSubscribe<Integer>() {
        @Override
        public void call(Subscriber<? super Integer> subscriber) {
            subscriber.onNext(1);
            SystemClock.sleep(500);
            subscriber.onNext(2);
            SystemClock.sleep(1000);
            subscriber.onNext(3);
            SystemClock.sleep(300);
            subscriber.onNext(4);
            SystemClock.sleep(500);
            subscriber.onNext(5);
            subscriber.onCompleted();
        }
    }).subscribeOn(Schedulers.computation());

    Observable<String> observable2 = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            SystemClock.sleep(300);
            subscriber.onNext("A");
            SystemClock.sleep(300);
            subscriber.onNext("B");
            SystemClock.sleep(500);
            subscriber.onNext("C");
            subscriber.onNext("D");
            subscriber.onCompleted();
        }
    }).subscribeOn(Schedulers.computation());

    Observable.combineLatest(observable1, observable2, new Func2<Integer, String, String>() {
        @Override
        public String call(Integer integer, String s) {
            return integer + s;
        }
    }).subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            Log.d("debug", s);  //打印1A,2A,2B,2C,2D,3D,4D,5D
        }
    });

过滤操作

*first / firstOrDefault:只发射第一项或者满足条件的第一项数据,其中firstOrDefault可以指定默认值(建议使用firstOrDefault,找不到对应元素时first会报异常)

    Observable.just(1, 2, 3)
            .first()    //发射第一项
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.d("debug", integer.toString()); //打印1
                }
            });

    Observable.just(1, 2, 3, 4)
            .first(new Func1<Integer, Boolean>() {  //发射大于2的第一项
                @Override
                public Boolean call(Integer integer) {
                    return integer > 2;
                }
            })
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.d("debug", integer.toString()); //打印3
               }
            });

    Integer[] arr = {};
    Observable.from(arr)
            .firstOrDefault(2)  //发射第一项,没有可发射的数据时,发射默认值2
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.d("debug", integer.toString()); //打印2
                }
            });

条件 / 布尔操作

聚合操作

转换操作

变换操作

篇幅有限,第一部分介绍到这里

上一篇 下一篇

猜你喜欢

热点阅读