Я использую RxJava.Конвертировать наблюдаемые в список
У меня есть Observable<T>
. Как преобразовать его в List<T>
?
Кажется, что это простая операция, но я не мог найти ее нигде в сети.
Я использую RxJava.Конвертировать наблюдаемые в список
У меня есть Observable<T>
. Как преобразовать его в List<T>
?
Кажется, что это простая операция, но я не мог найти ее нигде в сети.
Вы можете использовать toList() или toSortedList(). Напр.
observable.toList(myObservable)
.subscribe({ myListOfSomething -> do something useful with the list });
Найден это сам
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;
}
Надеется, что это помогает.
List<T> myList = myObservable.toList().toBlocking().single();
благодаря
Ананд Раман
приведет к блокировке, а не asyn –
@ZulqurnainJutt - вызов 'toBlocking' отдать его? (Вопрос не требует, чтобы он был асинхронным) –
RxJava 2+:
List<T> = theObservarale
.toList()
.blockingGet();
Вы не можете конвертировать наблюдаемым в список в любом идиоматических способом, потому что список не является действительно тип, который вписывается в Rx.
Если вы хотите, чтобы заполнить список с событиями, полученными от наблюдаемого потока, который вы должны в основном создать список и добавить элементы в методе Subscribe
как так (C#):
IObservable<EventType> myObservable = ...;
var list = new List<EventType>();
myObservable.Subscribe(evt => list.Add(evt));
В ToList
-Style операторы предоставляют список только после завершения потока (как IObservable<List<T>>
), поэтому это не полезно в сценариях, где у вас долгоживущий поток или вы хотите видеть значения до завершения потока.
Вы также можете использовать collect
оператор:
ArrayList list = observable.collect(ArrayList::new, ArrayList::add)
.toBlocking()
.single();
С collect
, вы можете выбрать, какой тип Collection
вы предпочитаете, и выполнить дополнительную работу по данному вопросу, прежде чем добавить его в список.
Это не преобразует его в список. Это в основном то же самое, что я назвал 'subscribe'. –
также обратите внимание, что toList() создает список только после завершения последовательности, поэтому не подходит для длинного потока – Schneider