目录
1. Rx简介
2. Rxjava基础知识
3. Rxjava创建操作符
4. Rxjava的线程操作
5. Rxjava变换过滤操作符
6. Rxjava合并、链接操作符
7. Rxjava条件和布尔操作符
变换操作符
rxjava中的变换操作符包括:
操作符 | 作用 |
---|---|
map | 对序列的每一项都用一个函数来变换Observable发射的数据序列 |
flatmap | 将Observable发射的数据集合变换为Observables集合,然后将这些Observable发射的数据放入一个单独的Observable中 |
switchMap | 将Observable发射的数据集合变换为Observables集合,然后只发射这些Observables最近发射的数据 |
scan | 对Observable发射的每一项数据应用一个函数,然后按照顺序依次发射每一个值 |
groupBy | 将Observable拆分为Observable集合,将原始Observable发射的数据按key分组,每一个Observable发射一组不同的数据 |
buffer | 定期从Observable收集数据到一个集合,然后把这些数据结合打包发射,而不是一次发射一个 |
window | 定期将来自Observable的数据拆分成一些Observable窗口,然后发射这些窗口,而不是每次发射一项 |
cast | 在发射之前强制将Observable发射的所有数据转换为指定的类型 |
map
map对Observable发射的每一项数据应用一个函数,执行变换操作,然后返回一个发射变换后结果的Observable。
Observable.just("TIAN")
.map(s -> s.toLowerCase())
.subscribe(s -> System.out.println(s));
flatmap
flatmap与map表现类似,但是它实际是将原始Observable发射的数据的每一项进行变化获得一个Observable,再将每一项获得的Observable发射的数据合并后形成又一个Observable,发着这些合并的数据。
groupBy
可以理解为分组,将一个Observable拆分为一些集合,他们中的每一个Observable都发射原始Observable的子数据。
Observable.range(1,8)
.groupBy(integer -> (integer % 2 == 0)? "偶数组": "奇数组")
.subscribe(s -> System.out.println("group name : " + s.getKey()));
//输出为 group name : 奇数组
//group name : 偶数组
buffer
定期收集Observable数据并放入一个数据集中,将原有的Observable变换为另一个Observable,新的Observable发射这个数据集。
Observable.range(1,8)
.buffer(4)
.subscribe(s -> System.out.println("onNext : " + s));
//执行的结果
//onNext : [1, 2, 3, 4]
//onNext : [5, 6, 7, 8]
window
定期会将原始的Observable的数据分解为一个Observable,发射这些Observable,而不是每次发射一项数据,
Observable.range(1,8)
.window(4)
.subscribe(s -> {
System.out.println("onNext");
s.subscribe(t -> System.out.print(t));
});
输出结果为:
onNext1234
onNext5678
过滤操作符
操作符 | 作用 |
---|---|
filter | 过滤数据 |
takeLast | 只发射最后的几项数据 |
last | 只发射最后一项数据 |
lastOrDefault | 只发射最后一项数据,若Observable为null,则发射默认值 |
takeLastBuffer | 将最后N项数据当做单个数据发射 |
skip | 跳过开始的N项数据 |
skiplast | 跳过最后的N项数据 |
take | 只发射开始的N项数据 |
first | 只发射第一项数据 |
firstOrDefault | 只发射第一项数据, 若Observable为null,则发射默认值 |
elementAt | 发射第N项数据 ,相当于数组中的index |
elementAtOrDefault | 发射第N项数据,若Observable为null,发射默认值 |
sample | 定期发射Observable最近的数据 |
throttleFirst | 定期发射Observable发射的第一项数据 |
throttleWithTimeOut | 只有当Observable在指定的时间段后还没有发射数据时,才发射一个数据 |
timeout | 如果在指定的时间段后还没有发射数据,就发射一个异常 |
distinct | 过滤掉重复的数据 |
distinctUntilChanged | 过滤掉连续重复的数据 |
ofType | 只发射指定类型的数据 |
ignoreElements | 丢弃所有正常数据,只发射错误或完成通知。 |
first last
只发射第一项数据。 只发射最后一项数据。
//结果输出为: onNext : 1
Observable.range(1,8)
.first(1)
.subscribe(s -> {
System.out.println("onNext: " + s);
});
take takelast
只发射前面N项数据, 只发射后面n项数据
//结果输出为: onNext : 7 onNext:8
Observable.range(1,8)
.takeLast(2)
.subscribe(s -> {
System.out.println("onNext: " + s);
});
skip skipLast
observable跳过发射的前N项数据。 跳过发射的后N项数据。
Observable.range(1,8)
.skip(2)
.subscribe(s -> System.out.println("onNext: " + s));
Observable.interval(1, TimeUnit.SECONDS)
.skip(5, TimeUnit.SECONDS) //这里的5表示时间,表示忽略5秒之前发送的数据,接受后期的数据。
.subscribe(s -> System.out.println("onNext: " + s));
distinct filter
//这里输出的是1,2,3,4,5
Observable.just(1,2,3,2,4,2,5,2).distinct().subscribe(s -> System.out.println(s));
//根据条件过滤数据,输出 3,4,5
Observable.just(1,2,3,2,4,2,5,2).filter(integer -> integer > 2)
.subscribe(s -> System.out.println(s));