buffer:在时间间隔内缓存结果,类似于buffer缓存一个list集合,区别在于window将这个结果集合封装成了list,详解
window:在时间间隔内缓存结果,类似于buffer缓存一个list集合,区别在于window将这个结果集合封装成了observable,详解
scan:遍历源Observable产生的结果,再按照自定义规则进行运算,依次输出每次计算后的结果给订阅者,call回调第一个参数是上次的结算结果,第二个参数是当此源observable的输入值,注意:当执行源observable输入的第一个时,并不会回调call函数,也就是说第一次并不参与运算,直接输给订阅者
Observable.range(1, 10).scan(new Func2<Integer, Integer, Integer>() { @Override public Integer call(Integer sum, Integer integer) { Log.e(TAG,"------->sum:" + sum + " integer:" + integer); return sum + integer; } }).subscribe(new Observer<Integer>() { @Override public void onCompleted() { Log.e(TAG,"------>onCompleted()"); } @Override public void onError(Throwable e) { Log.e(TAG,"------>onError()" + e); } @Override public void onNext(Integer integer) { Log.e(TAG,"------>onNext()" + integer); } });
03-16 15:00:00.202 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()1
03-16 15:00:00.202 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:1 integer:2
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()3
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:3 integer:3
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()6
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:6 integer:4
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()10
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:10 integer:5
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()15 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:15 integer:6 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()21 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:21 integer:7 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()28 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:28 integer:8 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()36
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:36 integer:9 03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()45 03-16 15:00:00.205 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:45 integer:10 03-16 15:00:00.205 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()55 03-16 15:00:00.205 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onCompleted()cast:在发射之前强制将Observable发射的所有数据转换为指定类型
public void cast() {
List<Person> list = new ArrayList<>();
for (int i = 0; i < 30; i++) {
list.add(new Male(true, "i" + i));
}
Observable.from(list).cast(Male.class).subscribe(new Subscriber<Male>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Male s) {
Log.i(tag, "name:" + s.name + "\n hasJJ:" + s.hasJJ);
}
});
}
class Person {
String name;
public Person(String name) {
this.name = name;
}
}
class Male extends Person {
public boolean hasJJ;
public Male(boolean hasJJ, String name) {
super(name);
this.hasJJ = hasJJ;
}
}
//多态,我们用Person接收Male对象,然后通过cast转成Male类型。有点instanceof的意思。
Map:将一个数据类型转成另一种数据类型
Observable.just(1,55,99,33) .map(new Func1<Integer, Student>() { @Override public Student call(Integer integer) { return new Student(integer,null); } }) .subscribe(new Action1<Student>() { @Override public void call(Student student) { Log.e(TAG,student.toString()); } });
03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=1, mList=null} 03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=55, mList=null} 03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=99, mList=null} 03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=33, mList=null}concatMap:是将源Observable转换成对各操作符,然后又链接返回给源Observable,这与flatMap十分相似,最大的区别:concatMap 是保证结果的顺序性,就是顺序与输入一致.详解
switchMap()和flatMap()很像,除了一点:当源Observable发射一个新的数据项时,如果旧数据项订阅还未完成,就取消旧订阅数据和停止监视那个数据项产生的Observable,开始监视新的数据项.详解
compose:详解