Эквивалент rxjs concatAll() в rxjava
Моя цель - моделировать события с некоторой случайной (предопределенной) задержкой. Я моделирую события в RxJs, как показано ниже:
var events = [
{id: 1, qty: 23, delayMs: 0},
{id: 1, qty: 231, delayMs: 3},
{id: 1, qty: 232, delayMs: 1},
{id: 1, qty: 233, delayMs: 2},
{id: 1, qty: 234, delayMs: 100},
{id: 1, qty: 235, delayMs: 50},
{id: 1, qty: 236, delayMs: 50},
{id: 1, qty: 237, delayMs: 50},
{id: 1, qty: 238, delayMs: 50},
{id: 1, qty: 239, delayMs: 50},
{id: 1, qty: 2310, delayMs: 50},
{id: 1, qty: 2311, delayMs: 50},
{id: 1, qty: 2312, delayMs: 100},
{id: 1, qty: 2313, delayMs: 50}
];
var rawEvents$ = O.from(events).map(o => O.return(o).delay(o.delayMs)).concatAll();
С помощью приведенного выше кода я получаю смоделированный поток событий, как и ожидалось. Я пытаюсь реализовать то же самое в Java, но похоже, что Java не имеет concatAll(). Код, который я написал до сих пор:
Observable rawEvents$ = Observable.concat(Observable.from(events).map(o -> Observable.just(o).delay(o.get("delayMs"), TimeUnit.MILLISECONDS)));
Но, поскольку я использовал concat () вместо concatAll(), я не смог вывести поток событий с указанной задержкой. Что эквивалентно concatAll() в Java?
1 ответ
Не эксперт в RxJAva, но я думаю, что стоит попробовать concatMap
(должно быть эквивалентно map(...).concatAll
). Если порядок не правильный, я бы попытался упорядочить массив событий, увеличив задержку.