RxJava 过滤操作符 ofType

时间:2022-07-19 17:49:59

.ofType(class)  指定某个类型的class,过滤属于这个类型的的结果,其它抛弃

例子:

      Observable.just("first", 2, 3, "four").ofType(Integer.class).subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
LogUtils.d("------>call():" + integer);
}
});

结果:

03-01 13:03:18.350 7828-7828/com.rxandroid.test1 D/----->: ------>call():2
03-01 13:03:18.350 7828-7828/com.rxandroid.test1 D/----->: ------>call():3

在这里过滤掉了非Integer类型的数据,只有2,3符合要求


当传递Object.class时并不会过滤任何数据,所有数据都是其子类

结合filter操作符演示一个例子:找出集合中大于5的数

 Object[] data = {"first", "2", 3, "four", 5, 6, 7};
Observable.from(data).ofType(Integer.class).filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer > 5;
}
}).subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
LogUtils.d("------>call():" + integer);
}
});

结果为:

03-01 13:19:48.210 12414-12414/com.rxandroid.test1 D/----->: ------>call():6
03-01 13:19:48.210 12414-12414/com.rxandroid.test1 D/----->: ------>call():7