RxJava(以及它派生出來的RxGroovy和RxScala)中有一個(gè)名為Single的Observable變種。
Single類似于Observable,不同的是,它總是只發(fā)射一個(gè)值,或者一個(gè)錯(cuò)誤通知,而不是發(fā)射一系列的值。
因此,不同于Observable需要三個(gè)方法onNext, onError, onCompleted,訂閱Single只需要兩個(gè)方法:
Single只會(huì)調(diào)用這兩個(gè)方法中的一個(gè),而且只會(huì)調(diào)用一次,調(diào)用了任何一個(gè)方法之后,訂閱關(guān)系終止。
Single也可以組合使用多種操作,一些操作符讓你可以混合使用Observable和Single:
操作符 | 返回值 | 說明 |
---|---|---|
compose | Single | 創(chuàng)建一個(gè)自定義的操作符 |
concat and concatWith | Observable | 連接多個(gè)Single和Observable發(fā)射的數(shù)據(jù) |
create | Single | 調(diào)用觀察者的create方法創(chuàng)建一個(gè)Single |
error | Single | 返回一個(gè)立即給訂閱者發(fā)射錯(cuò)誤通知的Single |
flatMap | Single | 返回一個(gè)Single,它發(fā)射對(duì)原Single的數(shù)據(jù)執(zhí)行flatMap操作后的結(jié)果 |
flatMapObservable | Observable | 返回一個(gè)Observable,它發(fā)射對(duì)原Single的數(shù)據(jù)執(zhí)行flatMap操作后的結(jié)果 |
from | Single | 將Future轉(zhuǎn)換成Single |
just | Single | 返回一個(gè)發(fā)射一個(gè)指定值的Single |
map | Single | 返回一個(gè)Single,它發(fā)射對(duì)原Single的數(shù)據(jù)執(zhí)行map操作后的結(jié)果 |
merge | Single | 將一個(gè)Single(它發(fā)射的數(shù)據(jù)是另一個(gè)Single,假設(shè)為B)轉(zhuǎn)換成另一個(gè)Single(它發(fā)射來自另一個(gè)Single(B)的數(shù)據(jù)) |
merge and mergeWith | Observable | 合并發(fā)射來自多個(gè)Single的數(shù)據(jù) |
observeOn | Single | 指示Single在指定的調(diào)度程序上調(diào)用訂閱者的方法 |
onErrorReturn | Single | 將一個(gè)發(fā)射錯(cuò)誤通知的Single轉(zhuǎn)換成一個(gè)發(fā)射指定數(shù)據(jù)項(xiàng)的Single |
subscribeOn | Single | 指示Single在指定的調(diào)度程序上執(zhí)行操作 |
timeout | Single | 它給原有的Single添加超時(shí)控制,如果超時(shí)了就發(fā)射一個(gè)錯(cuò)誤通知 |
toSingle | Single | 將一個(gè)發(fā)射單個(gè)值的Observable轉(zhuǎn)換為一個(gè)Single |
zip and zipWith | Single | 將多個(gè)Single轉(zhuǎn)換為一個(gè),后者發(fā)射的數(shù)據(jù)是對(duì)前者應(yīng)用一個(gè)函數(shù)后的結(jié)果 |
詳細(xì)的圖解可以參考英文文檔:Single