Поток<Mono> в поток в spring reactor

#java #reactive #spring-reactive #spring-reactor

#ява #реактивный #spring-реактивный #пружинный реактор

Вопрос:

Допустим, у меня есть ProductSupplier которые позволяют получить продукт по идентификатору. Но у него есть ограничения, и по одному запросу вы можете загрузить только один продукт.

 public interface ProductSupplier {
    public Mono<Product> getById(Long productId);
}
  

Сейчас я пишу, ProductService в котором мне нужно получить список продуктов по идентификатору

 public interface ProductService {
    ProductSupplier supplier;

    public Mono<List<Product>> getByIds(Collection<Long> ids) {
        return ids.stream()
                  .map(supplier::getById)//Stream<Mono<Product>>
                  //how to get Flux<Product> here?
                  .collectList();
    }
}
  

Ответ №1:

Вы могли бы работать с потоком напрямую вместо потока:

 Flux<Product> flux = Flux
  .fromIterable(ids)
  .flatMap(supplier::getById);