如何在 Java 中实现 IN 子句

How to implement IN clause in Java

今天无意中写了这段代码:

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(someMap.get(fieldName)!=null)
{
   //do something
}
else
{
   //do something else
}

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

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

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

}

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

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

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

    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
}

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

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

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