RxJava 1.0版本入门篇之--2

来源:互联网 发布:vue.js事件对象event 编辑:程序博客网 时间:2024/06/05 18:07

延迟创建被观察者defer

    //defer方法创建的被观察者实际上没什么用  他是在订阅的时候在Call方法内部创建并发送一个新的被观察者供订阅的观察者关联    //每关联一个观察者对象 那么特殊的被观察者内部就会多创建一个观察者关联    Observable<String> observable = Observable.defer(new Func0<Observable<String>>() {        @Override        public Observable<String> call() {            Observable<String> observable1 = Observable.create(new Observable.OnSubscribe<String>() {                @Override                public void call(Subscriber<? super String> subscriber) {                    subscriber.onNext("hello Android");                }            });            return observable1;        }    });

just方法代替原始create方法

    Observable.//                create(new Observable.OnSubscribe<String>() {//            @Override//            public void call(Subscriber<? super String> subscriber) {//                if(!subscriber.isUnsubscribed()){//                subscriber.onNext("好好学习");//                subscriber.onNext("天天向上");//                subscriber.onCompleted();//                }//            }//        })    just("好好学习","天天向上")//当所有事件发送完毕之后,它会自动调用onCompleted()    .subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("haha","call"+s);        }    });

操作队列的From方法

From函数发送一个队列的数据,输出的长度无线.

//1.定义被观察者,用来发送一个队列的事件Observable<Student> observable=Observable.from(persons);

类定时器Interval&Timer

//第一个参数表示时间间隔,第二个参数表示时间单位的参数Observable<Long>observable=Observable.interval(3000,TimeUnit.MILLISECONDS,Schedulers.io());Observable<Long>observable=Observable.timer(3000,2000,TimeUnit.MILLISECONDS);

数字操作Range&重复操作Repeat

    //range里面的参数取值表示范围    Observable.range(1,100).subscribe(new Action1<Integer>() {        @Override        public void call(Integer integer) {            Log.v("haha","call"+integer);        }    });    //repeat()参数表示要重复的次数    Observable.just("小二","王五").repeat(3)            .subscribe(new Action1<String>() {                @Override                public void call(String s) {                    Log.v("haha",s);                }            });

延迟操作代码Delay

    //delay延迟发送消息    Observable.create(new Observable.OnSubscribe<String>() {        @Override        public void call(Subscriber<? super String> subscriber) {            subscriber.onNext("hello");            //如果发送异常,则直接抛出异常,上面一行代码将接收不到,后面的代码也执行不到//                subscriber.onError(new NullPointerException("空指针"));            subscriber.onNext("Android");        }        //delay 整体延迟5s    }).delay(5000, TimeUnit.MILLISECONDS)            .subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.v("haha",s);        }    });

过滤重复选项的Distinct方法

Observable.from(initPersons())//过滤重复名字的项.distinct(new Func1<Student,String>){.......return student,name;}

Filter方法过滤指定条件的数据

    //filter 返回为真的数据将发送出去    Observable.just(1,2,3,4,5,6).filter(new Func1<Integer, Boolean>() {        @Override        public Boolean call(Integer integer) {            return integer<4;        }    }).subscribe(new Action1<Integer>() {        @Override        public void call(Integer integer) {            Log.v("haha",""+integer);        }    });

获取队列中某些数据First&Last&ElementAt

    //first获取队列的第一项数据,同理last()获取队列的最后一项数据,elementAt获取队列中的某个索引对应的数据    Observable.just(1,2,3,4,5,6)//.first()//                .last()            .elementAt(3)            .subscribe(new Action1<Integer>() {                @Override                public void call(Integer integer) {                    Log.v("haha",""+integer);                }            });

获取指定集合的数据Take&TakeLast

    //take获取队列中的前n个元素,takeLast获取队列中的后n个元素    Observable.just(1,2,3,4,5,6)

// .take(3)
.takeLast(3)
.subscribe(new Action1() {
@Override
public void call(Integer integer) {
Log.v(“haha”,”“+integer);
}
});

Sample&IgnoreElements

   //sample对发送数据进行一定频率的采样发送    Observable.interval(1000,TimeUnit.MILLISECONDS)            .sample(2000,TimeUnit.MILLISECONDS)            .subscribe(new Action1<Long>() {                @Override                public void call(Long aLong) {                    Log.v("haha",""+aLong);                }            });}    //ignoreElements  不关心Observable发送的数据,在完成时或遇到错误终止时收到通知,永远不会调用观察者的onNext()方法    Observable.just(1,2,3,4,5,6)            .ignoreElements()  //不发送任何信息 直接发送onCompleted()            .subscribe(new Subscriber<Integer>() {                @Override                public void onCompleted() {                    Log.v("haha","onCompleted");                }                @Override                public void onError(Throwable e) {                }                @Override                public void onNext(Integer integer) {                    Log.v("haha",""+integer);                }            });
原创粉丝点击