2016-04-14 13 views
11

RxJava kürzlich eingeführt Single. Gibt es eine Möglichkeit, ein bereits existierendes Observable (das ist so ziemlich ein Single) in ein Single zu konvertieren, ohne die Quelle des ursprünglichen Observablen zu verändern?RxJava eingeführt Single <T>. Wie konvertiere ich eine Observable <T> in eine Single <T>?

Zum Beispiel habe ich eine API-Serviceklasse mit einer Methode, die eine Observable zurückgibt - die im Wesentlichen holt einen Benutzer von einer Remote-Ressource. Angenommen, ich kann den Dienst nicht ändern. Ich möchte das anderswo konsumieren aber eine Single zurückgeben. Wie mache ich das?

Eine Prise mehr Hintergrund

RxJava hat vor kurzem das Konzept eines Einzel, die mehr oder weniger ein Rx-freundliche einfache Rückruf ist (dh ein beobachtbares emittierende ein Objekt oder ein Fehler) (lesen Sie mehr darüber hier - http://reactivex.io/documentation/single.html)

Antwort

22

2 neue Komfortmethoden wurden hinzugefügt, um genau das zu erreichen.

toSingle() wandelt eine beobachtbare die ein einzelnes Element in einem Einzel emittiert, das das Element emittiert

toObservable wandelt ein Einzel in einer beobachtbaren, dass das Element durch den Einzel emittiert aussendet und vervollständigt dann

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

+4

beachten Sie, dass, wenn einzelne hat keine Artikel, .toObservable() wird es nicht Observable.empty (make zurück). Stattdessen wird immer noch NoSuchElementException ausgelöst. Das resultierende Observable ist nicht dasselbe, als wenn die Quelle anfänglich Observable wäre. – eis

2

In rxjava2 können Sie Single.fromObservable() verwenden.

3

Ich denke, die akzeptierte Antwort ist veraltet. Sie sollten wahrscheinlich die folgenden Methoden überprüfen.

singleOrError: Gibt das einzige Element, IndexOutOfBoundsException aus, wenn die Quelle länger als 1 Element ist, oder NoSuchElementException, wenn die Quelle leer ist.

firstOrError: Gibt das erste Element oder eine NoSuchElementException aus, wenn die Quelle leer ist.

lastOrError: Gibt das lastelement oder eine NoSuchElementException aus, wenn die Quelle leer ist.

elementAtOrError: Gibt das indizierte Element oder eine NoSuchElementException aus.

Mehr Informationen zu dieser Seite: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0

Verwandte Themen