过滤,自然是过滤上游发出的不合格事件,剩下合格的事件继续发给下游。
1. filter
过滤条件在Predication的test方法里定义。
Observable.just("1","2","3")
.filter(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
if(s.equalsIgnoreCase("1")) {
return false;
}else {
return true;
}
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
2. take
只能与定时器操作符interval配合使用,才能解锁take的价值所在。//如何结束?
Observable.interval(1, TimeUnit.SECONDS)
.take(3)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
//取前面3秒的,3个事件
}
});
3. distinct
过滤重复的事件。
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("1");
emitter.onNext("2");
emitter.onNext("3");
}
}).distinct(new Function<String, String>() {
@Override
public String apply(String s) throws Exception {
return null;
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
4. elementAt
指定过滤的内容。靠下标指定时间内容。如果没有满足的下标,就输出默认的事件内容。
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("1");
emitter.onNext("2");
emitter.onNext("3");
}
})
.elementAt(2, "default 100")
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
//输出3
}
});