RxJava 1.0版本入门篇之--2

时间:2022-01-31 17:46:14

延迟创建被观察者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);
}
});