看这: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/