Обработка необязательного значения из Mono в Project Reactor - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу иметь Mono, который вызывает другой асинхронный метод, который возвращает тип Optional:

  1. имеет значение, если Optional не пусто,
  2. равно MonoEmpty, если значение Optional пусто.

Вот что я делаю сейчас:

Mono.fromCallable(() -> someApi.asyncCall()) .filter(Optional::isPresent) .map(Optional::get)

Очевидно, это не идеально, так как он использует два оператора после завершения вызова. Если возможно, я бы хотел иметь значение Mono.empty() или моно изнутри fromCallable.

Как лучше всего достичь того, чего я хочу?

1 Ответ

0 голосов
/ 07 ноября 2018

Существует альтернатива с flatMap, которая немного лучше, чем Optional.isPresent и Optional.get, которая может привести к случайному вызову get on empty Optional:

Mono.fromCallable(() -> someApi.asyncCall())
  .flatMap(optional -> optional.map(Mono::just).orElseGet(Mono::empty))
...