考えてみると、すべての要素からObservableを作成し、次にzip them togetherを作成してストリームの実行を継続する必要があります。
List<Observable<?>> observables = new ArrayList<>();
for(line in lines){
observables.add(Observable.fromCallable(callAsyncFunction(line));
}
Observable.zip(observables, new Function<...>() { ... }); // kinda like Promise.all()
しかし、それはこのようにループのためのあなたの必要性を排除し、Observable.from()
は、オブジェクトのストリームとして反復可能な範囲内のすべての要素を公開することができていない驚きとして来るかもしれません:擬似コードであなたにこのような何かを与えるだろう
。したがって、非同期操作が完了したときにonCompleted()
を呼び出す新しいObservableを作成して、Observable.fromCallable()
を使用することができます。その後、これらのObservableをリストにまとめてお待ちください。
Observable.from(lines)
.flatMap(new Func1<String, Observable<?>>() {
@Override
public Observable<?> call(String line) {
return Observable.fromCallable(callAsyncFunction(line)); // returns Callable
}
}).toList()
.map(new Func1<List<Object>, Object>() {
@Override
public Object call(List<Object> ignored) {
// do something;
}
});
私はthis answerに大きく私の答えのこの後半を基づかよ。
Plsは実際のコードを掲載します。 RxJavaには、さまざまな振る舞いを持つ非常に多くの演算子があります。どのオペレーターを使用するか知らなければ、手助けができません。 –
countdownlatchクラスを使用し、観察可能なコールcountDownメソッドの完了メソッドで使用します。 – gaston