1. 程式人生 > >RxJava從入門到不離不棄(七)——groupBy

RxJava從入門到不離不棄(七)——groupBy

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機動車
在這裡插入圖片描述