1. 程式人生 > >RxJava2 Flowable collect & collectInto

RxJava2 Flowable collect & collectInto

目錄

collect& collectInto介面

collect(Callable<? extends U> initialItemSupplier, BiConsumer<? super U,? superT> collector)

將源Publisher發出的項收集到一個可變資料結構中,並返回發出此結構的Single。

collectInto(U initialItem, BiConsumer<? super U,? super T> collector)

將源Publisher發出的項收集到一個可變資料結構中,並返回發出此結構的Single。

collect& collectInto圖解

原始碼中指向跟reduce使用同樣的圖解,圖上僅僅是單純的兩者相加,但是這裡BiFunction函式中可以做更多事情,如果call返回的不是數字,是其他的型別,或者可以做減乘除運算,都是可以的。

collect& collectInto測試用例

測試程式碼
 @Test
    public void collect() {
        Single single = Flowable.just(5, 7, 9).collect(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                return 3;
            }
        }, new BiConsumer<Integer, Integer>() {
            @Override
            public void accept(Integer v1, Integer v2) throws Exception {
                //v1是上面call返回的3,v2是衝just中發射的資料
                System.out.println("v1:" + v1 + ",v2:" + v2);
            }
        });

        single.subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer v3) throws Exception {
                //v3是上面call返回的3
                System.out.println("v3:"+v3);
            }
        });

        Flowable.just(30, 80, 90).collectInto(10, new BiConsumer<Integer, Integer>() {
            @Override
            public void accept(Integer v4, Integer v5) throws Exception {
                System.out.println("v4:" + v4 + ",v5:" + v5);
            }
        }).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer v6) throws Exception{
                System.out.println("v6:" + v6);
            }
        });
    }

測試結果:
v1:3,v2:5
v1:3,v2:7
v1:3,v2:9
v3:3
v4:10,v5:30
v4:10,v5:80
v4:10,v5:90
v6:10

collect& collectInto測試用例分析

上面同時做了collect& collectInto的測試用例,可以看到,基本上就是第一個引數所生成的值,可以被傳遞到指定指定BiFunciton函式中,在BiFunciton函式中可以做相應的操作,使用場景比較好把握。