Rxjava操作符---Creating Observables

看这:http://reactivex.io/documentation/operators.html#mathematical,官网解释的很清楚,如果看不懂英文,可以参考:
https://mcxiaoke.gitbooks.io/rxdocs/content/operators/Start.html

这篇文章也很不错有例子:
http://mushuichuan.com/2015/12/11/rxjava-operator-1/

Create

Create是最基本的创建Observable的操作符

Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
}

这里写图片描述

创建一个Observable最重要的就是要和合适的时机调用Subscriber的onNext/onComplete/onError方法。onNext就是发射处理好的数据给Subscriber; onComplete用来告诉Subscriber所有的数据都已发射完毕;onError是在发生错误的时候发射一个Throwable对象给Subscriber。需要注意的一点就是Observable必须调用所有的Subscriber的onComplete方法并且只能调用一次,出错的时候调用onError方法也是一样的,并且一旦调用后就不能调用Subscriber的任何其他方法了

Defer、Just

Defer操作符只有当有Subscriber来订阅的时候才会创建一个新的Observable对象,也就是说每次订阅都会得到一个刚创建的最新的Observable对象,这可以确保Observable对象里的数据是最新的,

其特点我们将在下面和Just进行对比理解。

这里写图片描述

Just

Just操作符将某个对象转化为Observable对象,并且将其发射出去,可以使一个数字、一个字符串、数组、Iterate对象等,是一种非常快捷的创建Observable对象的方法,

这里写图片描述

注意:Defer只要订阅就会创建新的Observable,而Just只有第一次订阅就确定数据,不会变,看图就能理解

一下代码摘自参考博文:

private Observable<Long> DeferObserver() {
        return Observable.defer(() -> Observable.just(System.currentTimeMillis()));
    }

 private Observable<Long> JustObserver() {
        return Observable.just(System.currentTimeMillis());
    }
mLButton.setOnClickListener(e -> deferObservable.subscribe(time -> log("defer:" + time)));
 mRButton.setOnClickListener(e -> justObservable.subscribe(time -> log("just:" + time)));

输出:
这里写图片描述

Defer操作符创建Observable对象每次调用我们都可以得到最新的的当前时间,而使用just只会返回同一个时间。

From

From操作符用来将某个对象转化为Observable对象,并且依次将其内容发射出去。这个类似于just,但是just会将这个对象整个发射出去。比如说一个含有10个数字的数组,使用from就会发射10次,每次发射一个数字,而使用just会发射一次来将整个的数组发射出去。

Observable.from(arrays)

这里写图片描述

代码上From 和 just的区别:

List<String> list = new ArrayList<>();
Observable.just(list).subscribe(new Subscriber<List<String>>()
        {
            @Override
            public void onCompleted()
            {

            }

            @Override
            public void onError(Throwable e)
            {

            }

            @Override
            public void onNext(List<String> strings)
            {

            }
        });
Observable.from(list).subscribe(new Subscriber<String>()
        {
            @Override
            public void onCompleted()
            {
                System.out.println("--------onCompleted--onCompleted");
            }

            @Override
            public void onError(Throwable e)
            {

            }

            @Override
            public void onNext(String s)
            {
                System.out.println("--------onNext---s : " + s);
            }
        });

看两个Subscriber中的next方法,From是里面的String元素,而just只是原对象List

Range

Range操作符根据出入的初始值n和数目m发射一系列大于等于n的m个值

Observable.range(10, 5);

这里写图片描述

Interval

Interval所创建的Observable对象会从0开始,每隔固定的时间发射一个数字。需要注意的是这个对象是运行在computation Scheduler,所以如果需要在view中显示结果,要在主线程中订阅。

Observable.interval(1, TimeUnit.SECONDS)

这里写图片描述

Repeat、Timer

Repeat会将一个Observable对象重复发射,我们可以指定其发射的次数

Observable.just(1).repeat(5)

这里写图片描述

Timer会在指定时间后发射一个数字0,注意其也是运行在computation Scheduler

Observable.timer(1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread())

这里写图片描述

Start

返回一个Observable,它发射一个类似于函数声明的值

这里写图片描述

Nerver/Empty/Throw

Nerver
这里写图片描述

Empty
这里写图片描述

Throw
这里写图片描述

参考:
https://mcxiaoke.gitbooks.io/rxdocs/content/operators/Start.html
http://mushuichuan.com/2015/12/11/rxjava-operator-1/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值