Используйте .flatMap
вместо .map
/ Flux.merge
, например:
Mono<Feed> unifiedFeedMono = request
.bodyToMono(AddFeedRequestDto.class) // Mono<AddFeedRequestDto>
.map(AddFeedRequestDto::getFeeds) // Mono<List<String>> feedUrls
.flatMapMany(Flux::fromIterable) // Flux<String> feedUrls
.flatMap(this::getFeedResponse) // Flux<Feed>
.map(Feed::getItems) // Flux<List<Item>>
.flatMap(Flux::fromIterable) // Flux<Item>
.collectList() // Mono<List<Item>>
.map(Feed::new); // Mono<Feed>
Обратите внимание, что .flatMap
является асинхронной операцией и будет выполнять запросы параллельно. Существует перегруженная версия, которая принимает аргумент concurrency
, если вы хотите ограничить параллелизм.
Заказ не гарантируется с .flatMap
, и полученные элементы могут чередоваться. Если вам нужны дополнительные гарантии заказа, замените .concatMap
или .flatMapSequential
.