tutorial single rxjava2 rxjava react just examples example create java rx-java reactive-programming

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.