1.项目地址
在FilterActivity里面
2.讲解
1.filter
过滤,false的表示过滤掉,true的表示保留
在 这 “三鹿”, “合生元”, “飞鸽” 三个中,三鹿保留,其他两个都过滤掉,既只打印“三鹿”。
//上游
Observable.just("三鹿", "合生元", "飞鸽")
//订阅
.filter(new Predicate<String>() {
@Override
public boolean test(String s) throws Throwable {//这里执行了三次,true表示打印,false表示不打印
Log.d(TAG, "test: 多少次");
// return true;//不过滤,默认全部打印
if (s.equals("三鹿")) {
return true;
} else {
return false;
}
}
})
//订阅
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Throwable {
Log.d(TAG, "accept: " + s);
}
});
2.take
可以限制打印多少个,下面的只打印8个(本来无限打印)
//定时器运行,只有在定时器运行的基础上,加入take过滤操作符,才有take过滤操作符的价值
//上游
Observable.interval(1, TimeUnit.SECONDS)//表示间隔一秒,打印一次。前面一个表示值,这里是1,后面表示单位,这里是秒
.take(8)
//下游
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Throwable {
Log.d(TAG, "accept: "+aLong);
}
});
3.distinct
表示去重
本来打印全部,现在去掉重复的,然后打印
//上游
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Throwable {
emitter.onNext(1);
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(1);
emitter.onNext(3);
emitter.onNext(5);
emitter.onNext(4);
emitter.onComplete();
}
})
//中间操作
.distinct()
//下游
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Throwable {
Log.d(TAG, "accept: "+integer);
}
});
打印结果为:1,2,3,5,4
4.elementAt
指定位置打印。下面打印的是葵花宝典2。0表示打印第一个,2表示打印第三个
//上游
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {
emitter.onNext("九阴真经");
emitter.onNext("葵花宝典");
emitter.onNext("葵花宝典2");
emitter.onNext("乾坤大罗伊");
emitter.onNext("独孤九剑");
emitter.onComplete();//完成标识
}
})
//中间操作
.elementAt(2,"默认典")//指定哪个保留
//下游
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Throwable {
Log.d(TAG, "accept: "+s);
}
});
5.ofType
Observable.just(false, 2, 3, true).ofType(Boolean.class).subscribe(new Action1<Integer>() {
@Override
public void call(Boolean b) {
LogUtils.d("------>call():" + b);
}
});
打印的结果为:false,true