延迟创建被观察者defer
//defer方法创建的被观察者实际上没什么用 他是在订阅的时候在Call方法内部创建并发送一个新的被观察者供订阅的观察者关联//每关联一个观察者对象 那么特殊的被观察者内部就会多创建一个观察者关联Observable<String> observable = Observable.defer(new Func0<Observable<String>>() {@Overridepublic Observable<String> call() {Observable<String> observable1 = Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic void call(Integer integer) {Log.v("haha","call"+integer);}});//repeat()参数表示要重复的次数Observable.just("小二","王五").repeat(3).subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.v("haha",s);}});
延迟操作代码Delay
//delay延迟发送消息Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic Boolean call(Integer integer) {return integer<4;}}).subscribe(new Action1<Integer>() {@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic void onCompleted() {Log.v("haha","onCompleted");}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(Integer integer) {Log.v("haha",""+integer);}});