RxJavaを使用しています。
Observable<T>
があります。 List<T>
に変換するにはどうすればよいですか?
簡単な操作のように思えますが、ネット上のどこにも見つけることができませんでした。
toList() または toSortedList() を使用できます。たとえば.
observable.toList(myObservable)
.subscribe({ myListOfSomething -> do something useful with the list });
お役に立てれば。
List<T> myList = myObservable.toList().toBlocking().single();
ありがとう
アナンド・ラマン
RxJava 2+:
List<T> = theObservarale
.toList()
.blockingGet();
collect
演算子も使用できます。
ArrayList list = observable.collect(ArrayList::new, ArrayList::add)
.toBlocking()
.single();
collect
を使用すると、希望するCollection
のタイプを選択し、アイテムをリストに追加する前に追加の操作を実行できます。
リストは実際にはRxに適合するタイプではないため、Observableをリストに変換することはできません。
監視可能なストリームからのイベントをリストに追加する場合は、基本的にリストを作成し、Subscribe
メソッド内にアイテムを追加する必要があります(C#):
IObservable<EventType> myObservable = ...;
var list = new List<EventType>();
myObservable.Subscribe(evt => list.Add(evt));
ToList
スタイルの演算子は、ストリームが完了するとリストを提供します(IObservable<List<T>>
)。これは、長期間存続するストリームがある場合や、ストリームが完了する前に値を確認したい場合には役立ちません。
これは遅い答えかもしれません、将来それが誰かを助けることを願っています。
演算子collectInto()
があります。 Rxchains
の非同期イベントの目的を完全に失うため、誰もblocking()
を使用しないことをお勧めします(テストケースの場合を除く)。可能な限り操作を連鎖させてください
_Completable setList(List<Integer> newIntegerList, Observable<Integer> observable){
return observable.collectInto(newIntegerList, List::add).ignoreElement();
}
// Can call this method
Observable<Integer> observable = Observable.just(1, 2, 3);
List<Integer> list = new ArrayList<>();
setList(list, observable);
_
この場合、blocking()
を使用する手間を省きます。