如何在Java中实现IN子句

时间:2017-02-18 05:37:49

标签: java string comparison shorthand

今天我遇到了编写这段代码:

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. .
}
.
.
.

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

4 个答案:

答案 0 :(得分:5)

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

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

}

单线: if(Arrays.asList("Name","ID","password","email").contains(fieldName)) { }

注意请勿使用==检查String平等。

答案 1 :(得分:1)

首先,最重要的是,此代码不正确。

    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
}

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我没有意识到的方法。可以定义和使用函数。见下面的代码:

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"}));