java - Java 中 "if then else"语句的 HashMap 替代方案

标签 java hashmap control-flow

任何人都可以帮助我使用 if then else 语句的控制流替代方案吗?或者推荐一篇好的文章?

据我所知,有些使用映射或枚举。我遇到的麻烦是我有多个条件,即 if (condition1 && condition2 && condition3)...并且我需要对多个排列执行此操作,并且需要验证所有 3 个变量。

请问有人能指出我正确的方向吗?

else if (String.Utils.isNotEmpty(payload.getKeyChange2TokenNumber()) && String.Utils.isEmpty(payload.getKeyChange1TokenNumber()) && String.Utils.isEmpty(payload.getKeyChange3TokenNumber()){
 String.format(return value dependant on outcome of validation)
}

所以没有 if then else 语句,我如何实现一个 hashmap 来确定返回什么来代替 if then else 语句返回

谢谢。

最佳答案

因此,很多人最终试图避免使用 if 语句,因为他们觉得“必须有一种更简单、更简洁的方法来做到这一点”。然而从根本上来说,代码只是基本级别的一堆 if 语句。

所以我不会太担心使用它们,因为通过尝试使用 HashMaps 或其他什么,那么你可能只是使用核弹来杀死蚊子。

需要记住的一件事是,您不需要嵌套的 if/else 语句,它确实变得很难检查。

对于您的示例,您提到必须多次对变量进行此检查。那么在流程开始时检查它们是否为空有什么问题呢?如果是则退出或返回相应的结果。然后您就不需要再次进行检查。

此外,使用简短的函数来描述您要执行的操作也很有用。

而不是:

else if (String.Utils.isNotEmpty(payload.getKeyChange2TokenNumber())
    && String.Utils.isEmpty(payload.getKeyChange1TokenNumber())
    && String.Utils.isEmpty(payload.getKeyChange3TokenNumber()) {
    String.format(return value dependant on outcome of validation)
    }

尝试:

 if (notEmpty(payload.getKeyChange2TokenNumber())
        && notEmpty(payload.getKeyChange1TokenNumber())
        && notEmpty(payload.getKeyChange3TokenNumber())) {
    String.format(return value dependant on outcome of validation)
}


private boolean notEmpty(String string) {
    return StringUtils.isNotEmpty(string);
}

此外,如果上述检查实际上与域相关响应相关,则使用它。例如,假设都检查了 getKeyChange1TokenNumbergetKeyChange2TokenNumbergetKeyChange3TokenNumber 以确定是否提供了强制 key 更改 token 编号,如果出现以下情况,则无法继续这不是真的。您的代码将如下所示:

public void main() {
    if (mandatoryKeyChangeTokensNotProvided(payload)) {
        return "Mandatory Key Change Tokens not provided";
    }
    ...
}

private boolean mandatoryKeyChangeTokensNotProvided(Payload payload) {
    return isEmpty(payload.getKeyChange2TokenNumber())
            && isEmpty(payload.getKeyChange1TokenNumber())
            && isEmpty(payload.getKeyChange3TokenNumber());
        }
private boolean isEmpty(String string) {
    return StringUtils.isEmpty(string);
}

尝试在代码中使用领域语言,这样对开发人员来说更有意义。因此,阅读本文的开发人员会阅读mandatoryKeyChangeTokensProvided方法并知道它的作用。如果他们想知道它是如何做到的,那么只需进入该方法并查看它对它进行字符串空检查即可。希望这能为您解决问题。

您可以通过多种方式执行此操作,但这完全取决于您的域。比如你说这就是验证?拥有一个为您执行所有这些检查的 validator 类有什么问题吗?但请记住 KISS 原则。尽量不要让事情变得过于复杂。

关于java - Java 中 "if then else"语句的 HashMap 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61578485/

相关文章:

java - Elasticsearch 在 Tomcat 7 上使用 javax/servlet/FilterConfig 导致 java.lang.LinkageError

java - list 中的类集成 : application stopped

java - Android 中的进度对话框不显示?

asynchronous - 如何有条件地退还不同类型的 future ?

java - 使用 Jasper Reports 生成 Word 格式和 PDF 的经验

java - 如何在 ResultSet 的映射中存储多个值(超过 2 个),类似于 HashMap?

java - 如何在 java 中将 HashMap 的键视为可选

c++ - 确定一个元素是否被插入到 HashMap 中

android - 如何恢复 Activity ?

haskell - 如何在 Haskell 中进行控制流