RxJava - extraire chaque élément de la liste
J'ai une méthode qui retourne un Observable<ArrayList<Long>>
, qui sont les id de certains Éléments. Je voudrais parcourir la liste et de le télécharger à chaque Élément à l'aide d'une autre méthode qui retourne Observable<Item>
.
Comment pourrais-je faire cela en utilisant RxJava opérateurs?
- Commande importante?
- Pas vraiment, mais à des fins éducatives est vraiment à voir les deux versions
Vous devez vous connecter pour publier un commentaire.
Voici une petite autonome exemple
Veuillez noter que
Observable.just(Arrays.<Integer>asList(1, 2, 3))
est une représentation simple deObservable<ArrayList<Long>>
de votre question. Vous pouvez le remplacer par votre propre Observable dans votre code.Cela devrait vous donner la base de ce que vous avez besoin.
p/s : Utiliser
flatMapIterable
méthode pour ce cas, car elle appartient àIterable
comme ci-dessous expliquant:Comme une alternative à
flatMapIterable
vous pouvez faire cela avecflatMap
:Personnellement, je pense
.flatMap(numberList -> Observable.fromIterable(numberList))
est plus facile à lire et à comprendre que les.flatMapIterable(numberList -> numberList )
.La différence semble être de l'ordre (RxJava2):
L'aide de la méthode des références, cela ressemble à:
Utiliser un Transformateur qui modifie la source Observables, l'appel d'une
flatMap
sur elle avec une fonction. Vous pouvez considérer cela comme un procédé en 2 étapes:Iterable<T>
) et re-émet comme unObservable<T>
flatMap
prend chacun de ces émiseObservable<T>
objets un les fusionne en un seulObservable<T>
Le Transformateur ressemble à ceci:
Une fois que vous avez créé votre Transformateur, vous pouvez utiliser
compose
pour appliquer la transformation de la source de l'observable:L'avantage de l'utilisation d'un
compose
avec unTransformer
au lieu d'unflatMap
avec unFunc1
est que si dans l'avenir, si vous avez besoin de mettre à plat une liste de nouveau, vous n'aurez même pas à penser à ce qui opérateur à utiliser (à la carte? flatMap? concatMap?). En d'autres termes, la flatmap opération est ancré dans la FlattenTransform classe et ce détail est rendue abstraite.Transformateurs ont également d'autres avantages, comme la possibilité de chaîner plusieurs opérations.
Dans Kotlin utilisation
flattenAsFlowable
: