前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxJava从入门到不离不弃(七)——groupBy

RxJava从入门到不离不弃(七)——groupBy

作者头像
蜻蜓队长
发布2018-10-18 11:44:32
4750
发布2018-10-18 11:44:32
举报
文章被收录于专栏:Android机动车Android机动车

RxJava中的groupBy,是将一个Observable分拆为一些Observables集合,它们中的每一个发射原始Observable的一个 子序列,哪个数据项由哪一个Observable发射是由一个函数判定 的,这个函数给每一项指定一个Key,Key相同的数据会被同一个Observable发射。

在这里插入图片描述

先看个示例,就明白了:

代码语言:javascript
复制
        ArrayList<Object> list = new ArrayList<Object>();
        list.add(new Person());
        list.add(new Person());
        list.add(new Student());
        list.add(new Student());
        list.add(new Person());
        list.add(new Student());
        list.add(new Student());
代码语言:javascript
复制
        Observable.from(list)
                .groupBy(new Func1<Object, Integer>() {
                    @Override
                    public Integer call(Object o) {
                        if (o.getClass().getName().equals(Person.class.getName())) {
                            return 1;
                        } else {
                            return 2;
                        }
                    }
                })
                .subscribe(integerObjectGroupedObservable -> {
                    int key = integerObjectGroupedObservable.getKey();

                    switch (key) {
                        case 1:

                            integerObjectGroupedObservable.subscribe(new Action1<Object>() {
                                @Override
                                public void call(Object o) {
                                    Log.e("groupBy", "call: 接收Person对象");
                                }
                            });


                            break;
                        case 2:

                            integerObjectGroupedObservable.subscribe(new Action1<Object>() {
                                @Override
                                public void call(Object o) {
                                    Log.e("groupBy", "call: 接收Student对象");
                                }
                            });

                            break;
                    }
                });

结果:

代码语言:javascript
复制
call: 接收Person对象
call: 接收Person对象
call: 接收Student对象
call: 接收Student对象
call: 接收Person对象
call: 接收Student对象
call: 接收Student对象

在GroupBy的Func1()函数中按你的逻辑分组,并将每个信息对应的组的key标志返回,如例子中我每个标志都是Integer类型的,GroupBy会返回Observable的一个特殊子类GroupedObservable,这个特殊子类有个额外的方法getKey(),可用于获得当前信息的组别。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android机动车 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档