web-dev-qa-db-de.com

RxJava hat Single <T> eingeführt. Wie konvertiere ich ein Observable <T> in ein Single <T>?

RxJava hat kürzlich Single eingeführt. Gibt es eine Möglichkeit, ein bereits vorhandenes Observable (das ist so ziemlich ein Single) in ein Single zu konvertieren, ohne die Quelle des ursprünglichen Observable zu ändern?

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

Eine Prise mehr Hintergrund

RxJava hat kürzlich das Konzept einer Single eingeführt, die mehr oder weniger ein Rx-freundlicher einfacher Rückruf ist (dh ein Observable, der ein Objekt oder einen Fehler ausgibt) (lesen Sie mehr darüber hier - http: //reactivex.io/documentation/ single.html )

29
loeschg

Ich denke eine andere Antwort ist veraltet. Sie sollten wahrscheinlich die folgenden Methoden überprüfen.

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

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

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

elementAtOrError: Gibt das indexth-Element oder eine NoSuchElementException aus.

Weitere Informationen auf dieser Seite: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.

28
Ehtesham Hasan

Hinweis: Dies ist für RxJava 1. Siehe andere Antworten unten/oben für Rx2 :)


Zu diesem Zweck wurden 2 neue Komfortmethoden hinzugefügt.

toSingle() konvertiert ein Observable, das ein einzelnes Element ausgibt, in ein Single, das dieses Element ausgibt

toObservable wandelt eine Single in eine Observable um, die den von der Single ausgegebenen Gegenstand ausgibt und dann vervollständigt

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

31
loeschg

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

17
PerrierCitror