美文网首页
RxJava学习(3)-流的操作

RxJava学习(3)-流的操作

作者: crossroads | 来源:发表于2018-01-23 11:56 被阅读7次

    前言

    根据Froussios英文版的学习笔记。

    一、Observable.just

    接受一至九个参数,返回一个按参数列表顺序发射这些数据的Observable。

    二、Observable.empty

    只会走onCompleted方法,即不发射任何数据但是正常终止。

    三、Observable.never

    不发射任何数据,常用于测试。

    四、Observable.error

    只会走onError方法

    五、Observable.defer

    再看这个操作符之前,先看看这个,我们设置i的初始值为10。

         Observable<Integer> justO = Observable.just(i,i);
            i++;
            justO.doOnNext(integer -> {
                System.out.println("1--"+integer);
                i++;
            }).subscribe();
            justO.doOnNext(integer -> System.out.println("2--"+integer))
                .subscribe();
    

    你觉得会输出什么呢?结果如下:

    1--10
    1--10
    2--10
    2--10
    

    这是因为这个值只会在执行到just的时候获取一次。
    那么defer会有何表现?

      Observable<Integer> defer = Observable.defer(()->Observable.just(i,i));
            i++;
            defer.doOnNext(integer -> {
                System.out.println("1--"+integer);
                System.out.println("current i="+i);
                i++;
            }).subscribe();
            defer.doOnNext(integer -> System.out.println("2--"+integer))
                .subscribe();
    

    输出结果如下

    1--11
    current i=11
    1--11
    current i=12
    2--13
    2--13
    

    这是因为defer直到有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable。

    六、Observable.create

    创建一个Observable,详情参考这里

    注意:建议你在传递给create方法的函数中检查观察者的isUnsubscribed状态,以便在没有观察者的时候,让Observable停止发射数据或者做昂贵的运算。

    七、Observable.range(final int start, final int count)

    Observable<Integer> values = Observable.range(1, 5)//发射1,2,3,4,5。
    

    八、Observable.interval(long initialDelay, long period, TimeUnit unit)

    在等待initialDelay时间后,每隔period时间发射一次事件,并且Observer会收到从0L开始递增的值。在取消订阅之前,将一直执行。

    九、Observable.timer(2, TimeUnit. SECONDS)

    在等待指定的时间之后发射一个0L数据。

    相关文章

      网友评论

          本文标题:RxJava学习(3)-流的操作

          本文链接:https://www.haomeiwen.com/subject/ulrraxtx.html