Вам на самом деле не нужно MonoSink
для вашей работы. Что вы можете сделать, это создать Flux
из вашего getActiveMonths
entrySet
и затем вызвать метод getActivePrice
с этими entrySet
'key
& value
. Итак, ваш getAPrice
на самом деле должен выглядеть так:
public Mono<List<APrice>> getAPrice() {
return Flux.fromIterable(getActiveMonths().entrySet())
.flatMap(entry -> getContractPrice(entry.getKey(), entry.getValue())).collectList();
}
Есть две причины, чтобы просто создать Flux
здесь.
У вас нет оснований для создания последовательности программно (для которой в основном используются MonoSink
или FluxSink
). У вас есть данные, и вам просто нужно использовать их без каких-либо манипуляций.
У вас действительно есть коллекция, и вы хотите использовать каждую ее запись, что делает ее хорошим кандидатом на рольиспользуется в Flux
(0-n элементов) вместо Mono
(0-1 элементов).
См. Эту официальную документацию Project Reactor , которая вносит ясность и подтверждает мою точку зрения.
Если getContractPrice
возвращает Mono<List<APrice>>
? Вот как getAPrice
должен выглядеть
public Mono<List<APrice>> getAPrice() {
return Flux.fromIterable(getActiveMonths().entrySet())
.flatMap(entry -> getContractPrice(entry.getKey(), entry.getValue()))
.flatMapIterable(aPrices -> aPrices).collectList();
}