最近自己在學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()); } });
以上就是我對這兩個函數的理解,可能和正確含義差距很大,不過我知道就會去改正!