關於RxJava的from()和 flatMap()方法


最近自己在學RxJava ,想到了一個東西,所以就在這里寫下來。

首先是from()方法,他可以接收一個集合,然后將其中的子元素挨個拆出來,例如下面的代碼:

  myObservable.just(mList).subscribe(new Action1<List<String>>() {
            @Override
            public void call(List<String> list) {
                Observable.from(list).subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.d("qin>>>","這不是一個標准寫法!"+s);
                    }
                });
            }
        });

基本上這個代碼的含義等價於

 myObservable.just(mList).subscribe(new Action1<List<String>>() {
            @Override
            public void call(List<String> list) {
                for(String s:list) {
                    Log.d("qin>>>","這一個取出寫法!"+s);
                }
            }
        });

而flatMap()的作用是輸入一個Observable,再輸出一個Observable。好吧,也許不是一個!也許是多個!

看下面代碼

 myObservable.just(mList).flatMap(new Func1<List, Observable<?>>() {
            @Override
            public Observable<?> call(List list) {
                return Observable.from(list);
            }
        }).subscribe(new Action1<Object>() {
            @Override
            public void call(Object o) {
                Log.d("qin>>>", o.toString());
            }
        });

這個方法實現的效果和上面兩個是一樣的,只不過按照官方的說法是更加符合RxJava的規范,而且沒有嵌套結構。

利用from(),函數和flastMap()函數組合,就可以實現,輸入一個包含數組的Observable對象,輸出多個包含單

個元素的Observable。

當然flastMap還有一個用處,就是加工Observable。舉個通俗的例子,例如有一個原味的Observable的輸入過來,

而我想獲得的是孜然味的Observable,此時我們的flastMap就可以派上用處了,我們可以在flastMap的 call函數里

實現給Observable加孜然的步驟!

        myObservable.just("原味的Observable").flatMap(new Func1<String, Observable<?>>() {
            @Override
            public Observable<?> call(String s) {

                return  Observable.just("加孜然了的" + s);
            }
        }).subscribe(new Action1<Object>() {
            @Override
            public void call(Object o) {
                Log.d("qin>>>", o.toString());
            }
        });

 

以上就是我對這兩個函數的理解,可能和正確含義差距很大,不過我知道就會去改正!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM