java - single - Convertir observable en una lista
rxjava single example (6)
Estoy usando RxJava.
Tengo un Observable<T>
. ¿Cómo lo convierto a List<T>
?
Parece ser una operación simple, pero no pude encontrarla en ninguna parte de la red.
Espero que esto ayude.
List<T> myList = myObservable.toList().toBlocking().single();
Gracias
anand raman
Lo encontré yo mismo
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;
}
No se puede convertir observable en una lista de ninguna manera idiomática, porque una lista no es realmente un tipo que se ajusta con Rx.
Si desea llenar una lista con los eventos de una secuencia observable, básicamente debe crear una lista y agregar los elementos dentro de un método de Subscribe
como ese (C #):
IObservable<EventType> myObservable = ...;
var list = new List<EventType>();
myObservable.Subscribe(evt => list.Add(evt));
Los operadores del estilo ToList
solo proporcionan una lista una vez que se completa la secuencia (como un IObservable<List<T>>
), por lo que no es útil en escenarios donde tiene una transmisión de larga duración o desea ver valores antes de que la transmisión finalice.
Puede usar toList() o toSortedList() . Por ej.
observable.toList(myObservable)
.subscribe({ myListOfSomething -> do something useful with the list });
RxJava 2+:
List<T> = theObservarale
.toList()
.blockingGet();
También puedes usar el operador de collect
:
ArrayList list = observable.collect(ArrayList::new, ArrayList::add)
.toBlocking()
.single();
Con la collect
, puede elegir qué tipo de Collection
prefiere y realizar una operación adicional en el elemento antes de agregarlo a la lista.