这个问题在这里已有答案:
我有一个代码块,如果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);
}
有没有更好的方法呢?
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));
});