2016-04-14 15 views
11

RxJava ha recentemente introdotto Single. C'è un modo per convertire un Osservabile già esistente (che è praticamente un singolo) in un singolo senza modificare la fonte dell'originale osservabile?RxJava ha introdotto Single <T>. Come convertire un Observable <T> in un singolo <T>?

Ad esempio, ho una classe di servizio API con un metodo che restituisce un Observable - che essenzialmente recupera un utente da una risorsa remota. Dì che non posso modificare il servizio. Voglio consumarlo altrove ma restituire un singolo. Come faccio a fare questo?

Un pizzico più di fondo

RxJava recentemente introdotto il concetto di un singolo che è più o meno un'amichevole semplice callback Rx (vale a dire un 'osservabile che emette un oggetto o un errore) (leggi di più qui - http://reactivex.io/documentation/single.html)

risposta

22

2 nuovi metodi di convenienza sono stati aggiunti per realizzare proprio questa cosa.

toSingle() converte un osservabile che emette un singolo elemento in un singolo che emette tale elemento

toObservable converte un singolo in un osservabile che emette la voce emessa dal singolo e quindi completa

(fonte: http://reactivex.io/documentation/single.html)

+4

nota che, se solo non ha oggetti, .toObservable() non ce la farà tornare Observable.empty(). Invece getterà ancora NoSuchElementException. Quindi risultante osservabile non è la stessa cosa se la fonte fosse osservabile per cominciare. – eis

2

In rxjava2 è possibile utilizzare Single.fromObservable().

3

Penso che la risposta accettata sia obsoleta. Probabilmente dovresti controllare i seguenti metodi.

singleOrError: emette elemento unico, IndexOutOfBoundsException se la sorgente è più lungo di 1 elemento o NoSuchElementException se la sorgente è vuoto.

firstOrError: Emette il primo elemento o NoSuchElementException se l'origine è vuota.

lastOrError: Emette l'ultimo elemento o un NoSuchElementException se l'origine è vuota.

elementAtOrError: Emette l'elemento indexth o NoSuchElementException.

Maggiori informazioni su questa pagina: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0

Problemi correlati