這個頁面展示了可用於對observable發射的資料執行變換操作的各種操作符。
變換操作
map( ) — 對序列的每一項都應用乙個函式來變換observable發射的資料序列
flatmap( ), concatmap( ), and flatmapiterable( ) — 將observable發射的資料集合變換為observables集合,然後將這些observable發射的資料平坦化的放進乙個單獨的observable
switchmap( ) — 將observable發射的資料集合變換為observables集合,然後只發射這些observables最近發射的資料
scan( ) — 對observable發射的每一項資料應用乙個函式,然後按順序依次發射每乙個值
groupby( ) — 將observable分拆為observable集合,將原始observable發射的資料按key分組,每乙個observable發射一組不同的資料
buffer( ) — 它定期從observable收集資料到乙個集合,然後把這些資料集合打包發射,而不是一次發射乙個
window( ) — 定期將來自observable的資料分拆成一些observable視窗,然後發射這些視窗,而不是每次發射一項
cast( ) — 在發射之前強制將observable發射的所有資料轉換為指定型別
map–一對一變換
private observableprocessurlsipbymap() catch (malformedurlexception e) catch (unknownhostexception e)
return
null;}})
.subscribeon(schedulers.io())
.observeon(androidschedulers.mainthread())
.subscribe(new action1()
});}
結果
傳送just
:map修改
flatmap–一轉多
flatmap對於新入門的來說,理解起來確實有一定的難度,可以先看乙個簡單的栗子:
subscriber subcriber =
new subscriber<
integer
>()
@override
public
void onerror(throwable e)
@override
public
void onnext(integer
integer)
};observable.just("1", "2", "3", "4")
.subscribeon(schedulers.io())
.observeon(androidschedulers.mainthread())
.flatmap(new func1<
string, observable<
integer
>>()
}).subscribe(subcriber);
從上面我們可以看出,map與flatmap很相似,都是用的func1,而且模式都是i,o模式,即是:i轉換成o並返回。但是最大的不同點在於:我們flatmap的輸出型別是observable的型別。
在這裡請注意乙個問題:在執行flatmap中返回之後(o輸出返回的observable),並不是立馬把返回的observable通過subscribe進行訂閱,而是將返回的若干observables都交給同乙個observable,然後再進行subscribe。
所以,在上面我們先將字串」1″,」2″, 「3」, 「4」 分別轉換成乙個整形的observable型別,即是:observable(2),observable(3),observable(4),observable(5)。然後將這些個observables統一轉換成乙個observable,再進行subscribe。看一下結果:
onnext: 2
onnext: 3
onnext: 4
onnext: 5
oncompleted: completed!
那麼,這個flatmap到底有何用呢?可以用在什麼地方呢?
假設這樣一種情景:乙個學校的老師我們定義為乙個集合a,每個老師包括了個人資訊和所教課程,乙個老師不可能只教授一門課程,所以我們將老師所教授課程定義為集合b。如果讓你列印每個老師所教課程,該怎麼做?
teacher teachers = ...;
subscribersubscriber = new subscriber()
...};observable.from(teachers)
.flatmap(new func1>()
}).subscribe(subscriber);
最後再補充一點:flatmap對這些observables發射的資料做的是合併(merge)操作,因此它們可能是交錯的。這意味著flatmap()函式在最後的observable中不能夠保證源observables確切的發射順序。 RxJava 變換操作
buffer buffer操作符,將原有observable發射的資料快取起來,比如buffer 2 就每2個資料放進乙個集合,然後發射這個集合出去。buffer方法有很多過載的方法。flatmap 該操作符,使用乙個指定的函式對原始observable發射的每一項資料執行變換操作 lift 這個函...
手寫rxjava事件變換
首先還是看怎麼使用 observable.just map new function map new function subscribeon schedulers.io observeon androidschedulers.mainthread subscribe new consumer 看原...
Rxjava的學習之變換操作符 scan
連續地對資料序列的每一項應用乙個函式,然後連續發射結果 scan操作符對原始observable發射的第一項資料應用乙個函式,然後將那個函式的結果作為自己的第一項資料發射。它將函式的結果同第二項資料一起填充給這個函式來產生它自己的第二項資料。它持續進行這個過程來產生剩餘的資料序列。這個操作符在某些情...