RxJava操作符
Posted lxq_xsyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJava操作符相关的知识,希望对你有一定的参考价值。
RxJava操作符
Creating Observables (创建操作符)
create
create是最基础的创建方法
Observable.create(new Observable.OnSubscribe<String>()
@Override
public void call(Subscriber<? super String> subscriber)
subscriber.onNext("吉格斯实验室");
).subscribe(new Subscriber<String>()
@Override
public void onCompleted()
System.out.println("onCompleted");
@Override
public void onError(Throwable e)
System.out.println("onError");
@Override
public void onNext(String s)
System.out.println("onNext: " + s);
);
just
just相当于create的简写
Observable.just("吉格斯实验室").subscribe(new Subscriber<String>()
@Override
public void onCompleted()
System.out.println("onCompleted");
@Override
public void onError(Throwable e)
System.out.println("onError");
@Override
public void onNext(String s)
System.out.println("onNext: " + s);
);
from
from相当于just的集合形式
Observable.from(new Integer[]1, 2, 3, 4).subscribe(new Subscriber<Integer>()
@Override
public void onCompleted()
System.out.println("onCompleted");
@Override
public void onError(Throwable e)
System.out.println("onError");
@Override
public void onNext(Integer s)
System.out.println("onNext: " + s);
);
defer
defer在我们调用create的时候不会创建subscribe对象,只有在我们订阅的时候才会创建。
empty/never/throw
empty创建一个空的observable对象,回调onComplete()方法。
never不回调任何方法。
throw回调onError()方法
interval
interval间隔事件发送(相当于定时器)
range
range创建一个范围内的数据的事件发送
repeat
repeat发送一个特定的数据事件,重复发送
start
start回调onStart()方法
timer
timer进行一个延时后发送数据事件
Transforming Observables (转换操作符)
map
map把一个对象转换成另一个对象(类型转换),比如下面将Integer转为String
Observable.just(123).map(new Func1<Integer, String>()
@Override
public String call(Integer integer)
return String.valueOf(integer);
).subscribe(new Subscriber<String>()
@Override
public void onCompleted()
@Override
public void onError(Throwable e)
@Override
public void onNext(String s)
);
flatmap
flatmap是一个一对多或者多对多的转换,转换后的是一个Observable对象,例如下面将integer转换为string
Observable.just(1, 2, 3, 4, 5).flatMap(new Func1<Integer, Observable<? extends String>>()
@Override
public Observable<? extends String> call(Integer integer)
return Observable.just(String.valueOf(integer));
).subscribe(new Subscriber<String>()
@Override
public void onCompleted()
@Override
public void onError(Throwable e)
@Override
public void onNext(String s)
);
groupby
groupby是通过指定规则对数据类别进行分类,例如下面我们对1,2,3,4,5进行了分组
Observable.just(1, 2, 3, 4, 5).groupBy(new Func1<Integer, Integer>()
@Override
public Integer call(Integer integer)
return integer % 2;
).subscribe(new Subscriber<GroupedObservable<Integer, Integer>>()
@Override
public void onCompleted()
@Override
public void onError(Throwable e)
@Override
public void onNext(GroupedObservable<Integer, Integer> integerIntegerGroupedObservable)
);
buffer
buffer可以一次订阅多个,onNext的回调是一个集合
scan
scan将数据累加来发送事件给观察者
Observable.range(1, 5).scan(new Func2<Integer, Integer, Integer>()
@Override
public Integer call(Integer sum, Integer integer)
return sum + integer;
).subscribe(new Subscriber<Integer>()
@Override
public void onCompleted()
@Override
public void onError(Throwable e)
@Override
public void onNext(Integer integer)
);
window
window可以通过时间间隔来分割成列表发送到观察者
Filtering Observables (过滤操作符)
debounce
debuounce的意思是在规定时间间隔外才发送数据(间隔内数据忽略)
distinct
distinct是一个去重操作符,可以去掉列表数据中重复的数据项
elementAt
elementAt取出列表数据指定位置的元素
filter
filter通过指定的规则返回boolean值来确定是否过滤掉某些数据项
first
first取出列表数据项的第一个数据
ignoreElements
ignoreElements不回调onNext,只调用onComplete()和onError()
last
last取出列表数据项的最后一个数据
sample
sample(采样发送)每隔一定时间采样数据列表一起发送给观察者
skip
skip跳过列表数据项的前几项
skiplast
skiplast跳过列表数据项的后几项
take
take取列表数据项的前几项
takelast
takelast取列表数据项的后几项
Combining Observables (组合操作符)
zip
zip是通过定义的组合规则将两列数据进行组合后发送给观察者
merge
merge是将两列数据通过时间合并成一列新数据列发送给观察者
startwith
startwith在数据列表之前插入一个数据发送给观察者
combineLatest
combineLatest将两个列表通过某规则组合成一个数据列表
join
switchOnNext
swichOnNext将拥有很多小的Observable数据对象组合成一个Obserable数据对象
Error Handling Operators (处理错误)
onErrorResumeNext
onErrorResumeNext 当原始Observable在遇到错误时,使用备用Observable
Observable.just(1,"2",3)
.cast(Integer.class)
.onErrorResumeNext(Observable.just(1,2,3))
.subscribe(integer -> Log.d("JG",integer.toString())) //1,2,3
;
onExceptionResumeNext
当原始Observable在遇到异常时,使用备用的Observable。与onErrorResumeNext类似,区别在于onErrorResumeNext可以处理所有的错误
onErrorReturn
当原始Observable在遇到错误时发射一个特定的数据
retry
retry 当原始Observable在遇到错误时进行重试
Observable.just(1,"2",3)
.cast(Integer.class)
.retry(3)
.subscribe(integer -> Log.d("JG",integer.toString()),throwable -> Log.d("JG","onError"))
;//1,1,1,1,onError
以上是关于RxJava操作符的主要内容,如果未能解决你的问题,请参考以下文章