В издателе Flux @ProjectReactor есть очень интуитивно понятный оператор delayElements
, который вводит задержку между каждым испускаемым элементом. Скажем, например, следующая треска испускает элемент в секунду.
Flux.fromIterable(List.of(1, 2, 3))
.delayElements(Duration.ofSeconds(1))
.map(i -> i * 2)
.doOnNext(r -> System.out.println(ZonedDateTime.now().toEpochSecond() + ": " + r))
.blockLast();
Чтобы добиться того же поведения в @Rxjava, мне пришлось провести некоторую церемонию.
final List<Integer> data = List.of(1, 2, 3);
Flowable.interval(1, TimeUnit.SECONDS)
.take(data.size())
.map(i -> data.get(i.intValue()) * 2)
.doOnNext(r -> System.out.println(ZonedDateTime.now().toEpochSecond() + ": " + r))
.blockingLast();
Кто-нибудь знает, как лучше сделать это в @Rxjava?