Подтвердить что ты не робот

RxJava - выполнение операции peek() или void в цепочке Observable?

Java 8 lambda streams имеют оператор peek(), который позволяет выполнять операцию void для каждого элемента. Обычно это используется для отладки, но это также хороший способ обмануть и запустить операцию void без сопоставления с чем-то.

Есть ли эквивалент этого в RxJava? Может быть, я не буду следовать хорошей практике или думать достаточно реакционно... но было бы очень удобно создавать статусные ярлыки до и после операции? Если peek() не поддерживается, следует ли лучше следовать шаблону?

Observable<Item> Item= ...;

Label statusLabel = new Label();
Label resultLabel = new Label();

Observable<CalculatedItem> calculatedItem = calculated.subscribeOn(Schedulers.computation())
.peek(c -> statusLabel.setText("Working.."))
.map(c -> performExpensiveCalculation(c))
.peek(r -> statusLabel.setText(""));

calculatedItem.subscribe(c -> resultLabel.setText(c));
4b9b3361

Ответ 1

Существует метод doOnNext(Action1<Item> action), который будет вызываться для каждого элемента в потоке.

Documentation