【问题标题】:Calling next method if there's no result from previous method [duplicate]如果上一个方法没有结果,则调用下一个方法[重复]
【发布时间】:2019-03-27 03:37:18
【问题描述】:

如果methodOne返回null,我有一段代码调用methodTwo。如果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() 则中断
  • @Michael 令人钦佩的选择没有回答考虑到当前的趋势。我请你喝杯咖啡。

标签: java methods optional


【解决方案1】:

Optional 有一些非常强大的工具,它们不依赖于if-then-else 流。例如,查找 Optional.orElse 函数以清理您的代码:

optionalWorkflow.orElse(featureBasedWorkflowProvider.getWorkflow(request))

您还可以使用 orElseGet 返回一个 lambda,它为您提供更多功能:

optionalWorkflow.orElseGet((value) -> {
   log.info("Cannot find workflow using remoteWorkflowProvider");
   return featureBasedWorkflowProvider.getWorkflow(request));
});

【讨论】:

  • orElse 还需要T,而不是Supplier&lt;Optional&lt;T&gt;&gt;。为什么要进行这种类型检查?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多