常用变换操作符
map、flatMap、concatMap、flatMapIterable、buffer、groupBy等
实例与功能介绍
1. map操作符
代码实例
Observable aObservable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("杨");
subscriber.onNext("月");
subscriber.onCompleted();
}
});
Observable bObservable = aObservable.map(new Func1<String,String>() {
@Override
public String call(String string) {
return string+"YaZhou";
}
});
结果
结果: 杨YaZhou
结果: 月YaZhou
结束
map操作符通过制定一个Func对象,将aObservable对象转换成新的bObservable对象并发射,观察者将受到bObservable处理。
2. flatMap操作符
代码实例
Observable observable = Observable.just("亚洲","康","洪楠");
observable = observable.flatMap(new Func1<String,Observable>() {
@Override
public Observable call(String string) {
return Observable.just("吴"+string);
}
});
结果
结果: 吴亚洲
结果: 吴康
结果: 吴洪楠
结束
flatMap操作符将Observable发射的数据集合变化为ObServable集合,然后将这些ObServable发射的数据平坦化地放进一个单独的ObServable。
3. concatMap操作符
代码实例
Observable observable = Observable.just("亚洲","康","洪楠");
observable = observable.concatMap(new Func1<String,Observable>() {
@Override
public Observable call(String string) {
return Observable.just("吴"+string);
}
});
结果
结果: 吴亚洲
结果: 吴康
结果: 吴洪楠
结束
concatMap操作符功能与flatMap操作符一致;不过,他解决了flatMap交叉问题,提供了一种能够把发射的值连续在一起的函数,而不是合并他们。
4. flatMapIterable操作符
代码实例
Observable observable = Observable.just("亚洲","康","洪楠");
observable = observable.flatMapIterable(new Func1<String,Iterable<String>>() {
@Override
public Iterable<String> call(String string) {
List<String> list = new ArrayList<String>();
list.add("吴"+string);
return list;
}
});
结果
结果: 吴亚洲
结果: 吴康
结果: 吴洪楠
结束
功能:flatMapIterable可以将数据包装成Iterable,在Iterable中就可以对数据进行处理
5. buffer操作符
代码实例
Observable observable = Observable.just("赵","钱","孙","李","周","吴","郑","王");
observable = observable.buffer(3);
结果
结果: 赵
结果: 钱
结果: 孙
----------------
结果: 李
结果: 周
结果: 吴
----------------
结果: 郑
结果: 王
----------------
结束
功能:buffer操作符将源Observable变换成一个新的Observable,新的Observable每次发射一组列表。
6. groupBy操作符
代码实例
SwordMan s1 = new SwordMan("韦一笑","A");
SwordMan s2 = new SwordMan("张三丰","SS");
SwordMan s3 = new SwordMan("周芷若","S");
SwordMan s4 = new SwordMan("宋远桥","S");
SwordMan s5 = new SwordMan("殷梨亭","A");
SwordMan s6 = new SwordMan("张无忌","SS");
SwordMan s7 = new SwordMan("宋青书","A");
SwordMan s8 = new SwordMan("灭绝师太","S");
Observable<GroupedObservable<String,SwordMan>> groupObservable = Observable.just(s1,s2,s3,s4,s5,s6,s7,s8).
groupBy(new Func1<SwordMan,String>() {
@Override
public String call(SwordMan swordMan) {
return swordMan.mLevel;
}
});
结果
结果: 韦一笑--A
结果: 殷梨亭--A
结果: 宋青书--A
结果: 张三丰--SS
结果: 张无忌--SS
结果: 周芷若--S
结果: 宋远桥--S
结果: 灭绝师太--S
结束
功能:groupBy操作符用于分组元素,将源Observable变幻成一个发射Observables的新Observable(分组后的)。