RxJava中interval可以循环执行,但它默认发射的数据是有序数列,那么如果想要重复发射其他类型的数据呢?repeat可以满足。
(1)repeat 设置执行的次数
Observable.just("A", "B").repeat(3).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println(s);
}
});
这里设置重复次数为3, 如果repeat不带参数默认无限循环。
(2)repeatWhen 设置下次执行的时间
Observable.just("A", "B").repeatWhen(new Function<Observable<Object>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Observable<Object> objectObservable) throws Exception {
return Observable.timer(10000, TimeUnit.MILLISECONDS);
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println(s);
}
});
代码中设置了下次执行的时间是10秒之后,这种方式只能执行两次。
(3)repeatUntil 根据条件决定是否执行
Observable.just("A", "B").repeatUntil(new BooleanSupplier() {
@Override
public boolean getAsBoolean() throws Exception {
count = count + 1;
if(count == 10){
count = 0;
return true;
}else{
return false;
}
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println(s);
}
});
getAsBoolean的返回值如果一直是false,则无限执行,当返回值是true时则立即中断执行。
网友评论