web-dev-qa-db-fra.com

RxJava a introduit Single <T>. Comment convertir un <T> observable en un <T> unique?

RxJava a récemment introduit Single . Existe-t-il un moyen de convertir un observable déjà existant (qui est à peu près un single) en un single sans modifier la source de l'observable d'origine?

Par exemple, j'ai une classe de service api avec une méthode qui renvoie un observable - qui consiste essentiellement à récupérer un utilisateur à partir d'une ressource distante. Disons que je ne peux pas modifier le service. Je veux consommer cela ailleurs mais retourner un single. Comment puis-je faire cela?

Un peu plus de fond

RxJava a récemment introduit le concept d'un Single qui est plus ou moins un simple rappel convivial Rx (c'est-à-dire un observable émettant un objet ou une erreur) (en savoir plus ici - http://reactivex.io/documentation/ single.html )

29
loeschg

Je pense qu'une autre réponse est dépassée. Vous devriez probablement vérifier les méthodes suivantes.

singleOrError: Emet le seul et unique élément, IndexOutOfBoundsException si la source est supérieure à 1 élément ou NoSuchElementException si la source est vide.

firstOrError: Emet le premier élément ou une NoSuchElementException si la source est vide.

lastOrError: Emet le dernier élément ou une NoSuchElementException si la source est vide.

elementAtOrError: Émet l'élément indexth ou une NoSuchElementException.

Plus d'informations sur cette page: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.

28
Ehtesham Hasan

Remarque: Ceci est pour RxJava 1. Voir les autres réponses ci-dessous/ci-dessus pour Rx2 :)


2 nouvelles méthodes pratiques ont été ajoutées pour accomplir cette tâche.

toSingle() convertit un observable qui émet un seul élément en un unique qui émet cet élément

toObservable convertit un Single en Observable qui émet l'élément émis par le Single puis termine

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

31
loeschg

Dans rxjava2 vous pouvez utiliser Single.fromObservable().

17
PerrierCitror