RxJava学习(3)-流的操作

2018-01-23  本文已影响7人  crossroads

前言

根据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数据。

上一篇下一篇

猜你喜欢

热点阅读