天天看點

Android函數響應式程式設計最新RxJava-操作符入門(1)

Android函數響應式程式設計最新RxJava-基本用法

我的簡書位址

Github位址

Rxjava操作符包括建立操作符、變換操作符、過濾操作符、組合操作符、錯誤處理操作符、輔助操作符、條件操作符等等.

今天介紹一下建立操作符和變換操作符

1.建立操作符

上一篇文章介紹了建立操作符 just create from , 還有defer,range,interval,repeat,timer等,下面介紹interval和range,repeat。

(1).interval

建立一個按固定時間發射整數序列 的Observable,也就是計時器,下面的代碼表示每隔3s列印一次Log:

Observable.interval(, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Long aLong) {
                    Log.e(TAG,aLong+"");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
           
Android函數響應式程式設計最新RxJava-操作符入門(1)

(2).range

建立發射指定範圍的整數序列的Observable,可以代替for循環,第一個參數為起始值,并且不小于0;第二個參數為終止值,左閉右開。代碼如下:

Observable.range(,).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Integer integer) {
                Log.e(TAG,integer+"");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
           
Android函數響應式程式設計最新RxJava-操作符入門(1)

(3).repeat

建立一個特定次數重複發射特定資料的Observable,代碼如下 :

Observable.range(,).repeat().subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Integer integer) {
        Log.e(TAG,integer+"");

    }

    @Override
    public void onError(@NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
    });
           
Android函數響應式程式設計最新RxJava-操作符入門(1)

2.變換操作符

變換操作符作用是對Observable發射的資料按照一定規則做一些變換,把變換完成的資料發射出去。變化操作符有 map,flatmap,concatmap,cast,groupBy,buffer,flatMapIterable等等。下面講主要講三個。

(1).map

map操作符,主要指定一個對象,轉換成一個新的Observable對象并發射,比如我們總寫的BASE_URL,總是在變化,但是後面的網址拼接不變。,這時候可以用map。

final String BASE_URL="https://github.com/javaexception";
    Observable.just("/keyboard_Cash").map(new Function<String, String >() {
    @Override
    public String apply(@NonNull String s) throws Exception {
        return BASE_URL+s;
    }
    }).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
          Log.e(TAG,s+"");
    }

    @Override
    public void onError(@NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
    });
           
Android函數響應式程式設計最新RxJava-操作符入門(1)

(2). flatMap與cast

flatMap講發射的資料轉換為Observable集合,而cast操作符是将Observable集合轉換為指定的類型。

List<String> list=new ArrayList<>();
        list.add("a1");
        list.add("a2");
        list.add("a3");  //我要選擇的
        list.add("a4");
     Observable.fromArray(list).flatMap(new Function<List<String>, ObservableSource<?>>() {
    @Override
    public ObservableSource<?> apply(@NonNull List<String> strings) throws Exception {
        return Observable.just(BASE_URL+strings.get());
    }
    }).cast(String.class).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        Log.e(TAG,s+"");
    }

    @Override
    public void onError(@NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
    });
           
Android函數響應式程式設計最新RxJava-操作符入門(1)

(3). flatMapIterable

flatMapIterable操作符可以将資料包裝成Iterable,zai Iterable中我們就可以對資料進行處理:

Observable.just(,,).flatMapIterable(new Function<Integer, Iterable<?>>() {
            @Override
            public Iterable<?> apply(@NonNull Integer integer) throws Exception {
                List<Integer> list=new ArrayList<Integer>();
                list.add(integer+);
                return list;
            }
        }).subscribe(new Observer<Object>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Object o) {
                           Log.e(TAG,o+"");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
            });
           
Android函數響應式程式設計最新RxJava-操作符入門(1)

上面給just資料裡全部加上1,結果顯示全部加1了。

今天的Rxjava就介紹到這,持續更新中!