【问题标题】: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. .
}
.
.
.
是否有任何方法或解决方法可以实现这一点?
【问题讨论】:
标签:
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"}));