Привет, я довольно долго боролся с этим. Любая помощь приветствуется.
У меня есть требование запустить одну наблюдаемую после завершения другой наблюдаемой. Так, например Следующий код создает наблюдаемое из входного значения в значение + 10.
Observable<ColoredIntegerModel> getSequenceObservable(int value, int delay, int color) {
return Observable.range(value,10)
.map(i -> {
Log.d(TAG, "Value " + i
+ " evaluating on " + Thread.currentThread().getName()
+ " emitting item at " + System.currentTimeMillis());
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
}
return new ColoredIntegerModel(i, color);
});
}
ColorIntegerModel выглядит следующим образом
public class ColoredIntegerModel {
private Integer mValue;
private int mColor;
public ColoredIntegerModel(Integer value, int color) {
mValue = value;
mColor = color;
}
public Integer getValue() {
return mValue;
}
public int getColor() {
return mColor;
}
}
Я создаю две наблюдаемые следующим образом и объединяю их следующим образом.
Observable<ColoredIntegerModel> observable1 = getSequenceObservable(1, 1000, Color.BLUE);
Observable<ColoredIntegerModel> observable11 = getSequenceObservable(11, 1000, Color.RED);
mDisposable =
observable1.concatWith(observable11)
.doOnDispose(() -> {Log.d(TAG, "observable disposed");})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.repeat(2)
.subscribe((m) -> {
Utils.appendColoredText(mResultTextView, "Adding item "
+ m.getValue().toString() + "\n", m.getColor());
});
Приведенный выше код печатает 1..10 (синим цветом каждый элемент с задержкой на 1 с) и 11..20 (красным цветом).
Пока все хорошо.
Но мое требование - создать вторую наблюдаемую только после того, как первая будет завершена. Фактически это может быть массив наблюдаемых, где наблюдаемая n + 1 создается только после выполнения n-го. Каждая наблюдаемая может испускать несколько предметов. Есть ли оператор для этого?