zip
(в котором используется TupleN
) - для случаев, когда вы хотите создать значения путем компоновки из комбинации источников. Например. из Flux<FirstName>
и Flux<LastName>
вы хотите Flux<FullName>
, который испускает одну FullName
для каждой входящей пары FistName
/ LastName
.
Для вашего случая использования, когда вы хотите выполнить несколько вызовов (возможно, параллельно) и собрать результаты в список, flatMap
достаточно:
private Mono<List<String>> getContent(List<String> ids) {
return Flux
.fromIterable(ids)
.flatMap(id -> callApi(id))
.flatMap(response -> response.bodyToMono(String.class))
.collectList();
}
Tuple
- это неизменяемая структура данных фиксированного размера, используемая zip
для удобства, когда вы не хотите создавать выделенный POJO. Нет смысла пытаться поддерживать неограниченные размеры, поэтому мы остановились на восьми. Существует вариант zip
, который объединит более 8 источников, но заставит вас работать с Object[]
вместо Tuple
.