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

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

在这里插入图片描述

先看个示例,就明白了:

        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());
        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;
                    }
                });

结果:

call: 接收Person对象
call: 接收Person对象
call: 接收Student对象
call: 接收Student对象
call: 接收Person对象
call: 接收Student对象
call: 接收Student对象

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

原文发布于微信公众号 - Android机动车(JsAndroidClub)

原文发表时间:2018-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

JavaBean转Map方法

Map<String, Object> fieldMap =new HashMap<String, Object>(); BeanInfo beanInfo ...

44560
来自专栏Java学习网

Java面试题系列之基础部分(四)——每天学5个问题

Java基础部分学习的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法,这些都是最基...

25680
来自专栏指尖下的Android

简单算法之冒泡排序

外层循环控制循环次数,内层循环控制比对元素的个数,因为冒泡排序是两两比对,五个元素的数组只需要比对四次,因为最后一个元素没有可比对的元素,内层循环判断条件j <...

9920
来自专栏机器学习从入门到成神

海量数据处理之Bti-map详解

    所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以...

16310
来自专栏赵俊的Java专栏

移动零

18550
来自专栏石奈子的Java之路

原 JVM基础命令

28470
来自专栏深入浅出区块链技术

Solidity语法详解 - 类型介绍1

24140
来自专栏从零开始学 Web 前端

从零开始学 Web 之 ES6(二)ES5的一些扩展

打印结果:Obj2下面的__proto__指向的原型对象中有Obj1的属性,相当于继承了Obj1属性。

11150
来自专栏程序你好

如何将Array转换为List?

可以使用 Arrays.asList() 方法, 该方法接受一个数组作为输入,并返回一个列表作为输出。

10320
来自专栏数据结构与算法

3138 栈练习2

3138 栈练习2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Descriptio...

28660

扫码关注云+社区

领取腾讯云代金券