RxJava

RxJava<第十篇>:repeat系列

2019-03-14  本文已影响1人  NoBugException

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时则立即中断执行。

上一篇下一篇

猜你喜欢

热点阅读