Convertir observable en liste
j'utilise RxJava.
j'ai un Observable<T>
. Comment puis-je convertir List<T>
?
semble être une opération simple, mais je n'ai pas pu le trouver n'importe où sur le net.
6 réponses
Vous pouvez utiliser toList() ou toSortedList () . Pour, par exemple,
observable.toList(myObservable)
.subscribe({ myListOfSomething -> do something useful with the list });
Espérons que cette aide.
List<T> myList = myObservable.toList().toBlocking().single();
merci
anand raman
vous pouvez aussi utiliser le collect
opérateur:
ArrayList list = observable.collect(ArrayList::new, ArrayList::add)
.toBlocking()
.single();
collect
, Vous pouvez choisir quel type de Collection
vous préférez et d'effectuer une opération supplémentaire sur l'élément avant de l'ajouter à la liste.
vous ne pouvez pas convertir observable en liste de façon idiomatique, parce qu'une liste n'est pas vraiment un type qui correspond à Rx.
si vous voulez peupler une liste avec les événements d'un flux observable, vous devez créer une liste et ajouter les éléments dans un Subscribe
méthode comme (C#):
IObservable<EventType> myObservable = ...;
var list = new List<EventType>();
myObservable.Subscribe(evt => list.Add(evt));
ne fournissent une liste qu'une fois le flux terminé (en tant que IObservable<List<T>>
), ce qui n'est donc pas utile dans les scénarios où vous avez un flux de longue durée ou vous voulez voir les valeurs avant la fin du flux.
Trouvé moi-même
public static <T> List<T> toList(Observable<T> observable) {
final List<T> list = new ArrayList<T>();
observable.toBlocking().forEach(new Action1<T>() {
@Override
public void call(T t) {
list.add(t);
}
});
return list;
}