Вызов следующего метода, если нет результата от предыдущего метода

У меня есть блок кода, в котором я вызываю methodTwo, если methodOne возвращает null. Если methodTwo возвращает null, я вызываю methodThree

Optional<Workflow> optionalWorkflow = remoteWorkflowProvider.getWorkflow(request);

if (!optionalWorkflow.isPresent()) {
  log.info("Cannot find workflow using remoteWorkflowProvider");
  optionalWorkflow = featureBasedWorkflowProvider.getWorkflow(request);
}

if (!optionalWorkflow.isPresent()) {
  log.info("Cannot find workflow using featureBasedWorkflowProvider");
  optionalWorkflow = legacyWorkflowProvider.getWorkflow(request);
}

Есть ли лучший способ сделать это?

Вы можете составить список провайдеров, а затем просмотреть их и сломать, если optionalWorkflow.isPresent()

WOUNDEDStevenJones 26.03.2019 20:34
first().or(() -> second()).or(() -> third())
Michael 26.03.2019 20:34

@Michael замечательный выбор, не отвечая, учитывая текущую тенденцию. Я бы предложил вам кофе.

LppEdd 26.03.2019 20:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
33
1

Ответы 1

Optional имеет несколько действительно мощных инструментов, которые не полагаются на if-then-else потоки. Посмотрите, например, функцию Optional.orElse, чтобы немного очистить свой код:

optionalWorkflow.orElse(featureBasedWorkflowProvider.getWorkflow(request))

Вы также можете использовать orElseGet для возврата лямбды, которая дает вам больше функциональности:

optionalWorkflow.orElseGet((value) -> {
   log.info("Cannot find workflow using remoteWorkflowProvider");
   return featureBasedWorkflowProvider.getWorkflow(request));
});
orElse также требует T, а не Supplier<Optional<T>>. Почему эта проверка типов?
Andrey Tyukin 26.03.2019 20:39

Другие вопросы по теме

Похожие вопросы