RxJava: использовать таймер между итерациями в массиве - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь использовать RxJava для перебора и массива чисел, где каждое число представляет тайм-аут, который я хотел бы выполнить перед выполнением следующей эмиссии.

Это то, что я придумал ..

    AtomicInteger index = new AtomicInteger(0);     
    Long[] intervals = {1L,2L,3L,4L};
    Observable.fromArray(intervals)
    .zipWith(Observable.interval(intervals[index.getAndIncrement()], TimeUnit.SECONDS), (a,b) -> a)
    .subscribe(event -> {
        System.out.println(LocalDateTime.now());
    });     

Проблема в этом коде заключается в том, что Observable.interval берет первый индекс в массиве, но игнорирует getAndIncrement(), поэтому я получаю только тайм-ауты 1 с.

Есть идеи, как заставить это работать?

1 Ответ

0 голосов
/ 02 мая 2018

Попробуйте это:

Long[] intervals = {1L, 2L, 3L, 4L};

Flowable.fromArray(intervals)
.flatMap(interval -> Flowable.timer(interval, TimeUnit.SECONDS)
                     .map(w -> interval), 1)
.subscribe(event -> {
    System.out.println(LocalDateTime.now());
})
...