【问题标题】:How to implement IN clause in Java如何在 Java 中实现 IN 子句
【发布时间】:2017-07-07 18:43:01
【问题描述】:

今天偶然发现写了这段代码:

if("Name".equals(fieldName) || "ID".equals(fieldName) 
                 || "password".equals(fieldName) || "email".equals(fieldName)){
     //do something.
}else{
     //for other 76 properties do something.
}

我将 fieldName 与四个属性进行比较,因此我写了四个条件。 Java中有没有一种方法可以结合所有四个条件并将其编写为满足我要求的单个条件。比如

if(fieldName IN ("Name", "ID", "password", "email"){
    //do something. .
}
.
.
.

是否有任何方法或解决方法可以实现这一点?

【问题讨论】:

  • 您可以简单地将您的声明发送给if (false) { ... }。请阅读stackoverflow.com/questions/513832/… 了解原因。要回答您的真正问题,Java 没有您正在寻找的那种语法,但您可以使用 Set

标签: java string comparison shorthand


【解决方案1】:

如果您使用一些不会经常更改的静态属性。我建议您应该将这些属性作为相同的键和值填充到地图中。

if(someMap.get(fieldName)!=null)
{
   //do something
}
else
{
   //do something else
}

您也可以将这些属性写入某个文件,并在程序启动时使用 Properties 类加载它们并使用它。

【讨论】:

    【解决方案2】:

    您可以定义您感兴趣的可能值的List,并检查列表中是否存在所需的值。

    List<String> fieldValues = Arrays.asList("Name","ID","password","email");
    if(fieldValues.contains(fieldName)) {
    
    }
    

    一个班轮: if(Arrays.asList("Name","ID","password","email").contains(fieldName)) { }

    注意不要使用== 来检查String 是否相等。

    【讨论】:

    • 我相信这是最好的单行解决方法。 .
    【解决方案3】:

    首先,也是最重要的,这段代码不正确。

        if  ("Name" == fieldName || "ID" == fieldName 
                 || "password" == fieldName || "email" == fieldName) {
    

    使用== 比较字符串几乎总是不正确的。

    话虽如此,编写测试最有效(正确)的方法是:

    switch (fieldName) {
    case "Name": case "ID": case "password": case "email":
        // do something
        break;
    default:
        // do something else
    }
    

    如果编译器认为这是最有效的方法,这应该在幕后使用哈希集,但该集仅构造一次。使用更简洁的解决方案,您很可能会在每次进行测试时构建并丢弃代表临时集合/列表的数据结构。

    【讨论】:

      【解决方案4】:

      没有我知道的方法。可以定义和使用函数。见以下代码:

      boolean stringInArray(String src, String[] strArray) {
        if (strArray == null || src == null)
          return false;
        for (int i = 0; i < strArray.length; i++) {
          if (src.equals(strArray[i]))
            return true;
        }
        return false;
      }
      
      // Print false
      System.out.println(stringInArray("John",
        new String[] { "Name", "ID", "password", "email"}));
      
      // Print true
      System.out.println(stringInArray("ID",
        new String[] { "Name", "ID", "password", "email"}));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多