您的位置:首页 > 编程语言 > Java开发

RxJava 转换操作符groupBy

2016-02-25 18:13 561 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: