RxJava從入門到不離不棄(七)——groupBy
阿新 • • 發佈:2019-02-01
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機動車