RxJava 转换操作符groupBy

来源:互联网 发布:淘宝v达人 编辑:程序博客网 时间:2024/05/22 01:27

groupBy操作符顾名思义就是分组的意思:

第一步:构造分组  call的返回值决定了组名

Observable.range(0, 10).groupBy(new Func1<Integer, Integer>() {            @Override            public Integer call(Integer integer) {                return integer % 3;////分成0,1,2 三个小组            }        })

第二部:订阅分组详情:


.subscribe(new Observer<GroupedObservable<Integer, Integer>>() {            @Override            public void onCompleted() {                LogUtils.d("------>onCompleted()");            }            @Override            public void onError(Throwable e) {                LogUtils.d("------>onError()" + e);            }            @Override            public void onNext(final GroupedObservable<Integer, Integer> integerIntegerGroupedObservable) {                integerIntegerGroupedObservable.subscribe(new Observer<Integer>() {                    @Override                    public void onCompleted() {                        LogUtils.d("------>inner onCompleted()");                    }                    @Override                    public void onError(Throwable e) {                        LogUtils.d("------>inner onError()" + e);                    }                    @Override                    public void onNext(Integer integer) {                        LogUtils.d("------>group:" + integerIntegerGroupedObservable.getKey() + "  value:" + integer);                    }                });            }        });

全部代码:

 Observable.range(0, 10).groupBy(new Func1<Integer, Integer>() {            @Override            public Integer call(Integer integer) {                return integer % 3;////分成0,1,2 三个小组            }        }).subscribe(new Observer<GroupedObservable<Integer, Integer>>() {            @Override            public void onCompleted() {                LogUtils.d("------>onCompleted()");            }            @Override            public void onError(Throwable e) {                LogUtils.d("------>onError()" + e);            }            @Override            public void onNext(final GroupedObservable<Integer, Integer> integerIntegerGroupedObservable) {                integerIntegerGroupedObservable.subscribe(new Observer<Integer>() {                    @Override                    public void onCompleted() {                        LogUtils.d("------>inner onCompleted()");                    }                    @Override                    public void onError(Throwable e) {                        LogUtils.d("------>inner onError()" + e);                    }                    @Override                    public void onNext(Integer integer) {                        LogUtils.d("------>group:" + integerIntegerGroupedObservable.getKey() + "  value:" + integer);                    }                });            }        });

结果为:

02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:0  value:0
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:1  value:1
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:2  value:2
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:0  value:3
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:1  value:4
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:2  value:5
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:0  value:6
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:1  value:7
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:2  value:8
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>group:0  value:9
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>inner onCompleted()
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>inner onCompleted()
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>inner onCompleted()
02-26 18:01:36.218 9796-9796/com.rxandroid.test1 D/----->: ------>onCompleted()


call的返回值并不是组的个数:

如:

 Observable.range(0, 10).groupBy(new Func1<Integer, Integer>() {            @Override            public Integer call(Integer integer) {               // return integer % 3;////分成0,1,2 三个小组                return 2;            }        }).subscribe(new Observer<GroupedObservable<Integer, Integer>>() {            @Override            public void onCompleted() {                LogUtils.d("------>onCompleted()");            }            @Override            public void onError(Throwable e) {                LogUtils.d("------>onError()" + e);            }            @Override            public void onNext(final GroupedObservable<Integer, Integer> integerIntegerGroupedObservable) {                integerIntegerGroupedObservable.subscribe(new Observer<Integer>() {                    @Override                    public void onCompleted() {                        LogUtils.d("------>inner onCompleted()");                    }                    @Override                    public void onError(Throwable e) {                        LogUtils.d("------>inner onError()" + e);                    }                    @Override                    public void onNext(Integer integer) {                        LogUtils.d("------>group:" + integerIntegerGroupedObservable.getKey() + "  value:" + integer);                    }                });            }        });
结果只有一个组,这个组的组名叫2:

02-26 18:14:19.228 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:0
02-26 18:14:19.228 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:1
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:2
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:3
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:4
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:5
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:6
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:7
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:8
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>group:2  value:9
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>inner onCompleted()
02-26 18:14:19.238 21365-21365/com.rxandroid.test1 D/----->: ------>onCompleted()


2 0
原创粉丝点击