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