版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiashuai94/article/details/83003104
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机动车