首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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(),可用于获得当前信息的组别。

下一篇
举报
领券