美文网首页
RxJava(三)--变换操作符

RxJava(三)--变换操作符

作者: azu_test | 来源:发表于2019-03-11 11:48 被阅读0次

常用变换操作符

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(分组后的)。

相关文章

网友评论

      本文标题:RxJava(三)--变换操作符

      本文链接:https://www.haomeiwen.com/subject/gqyrpqtx.html