2017-02-18 106 views
1

今天我碰到編寫這些代碼來:如何實現IN子句中的Java

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

我比較字段名有四個屬性,因此我寫了四個條件。 Java中有沒有一種方法可以將所有四個條件結合起來,並將其寫入滿足我的要求的單一條件。例如

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

是否有任何方法或變通方法來實現這一目標?

+0

你可以簡單地把你的語句變成'if(false){...}'。請閱讀http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java明白爲什麼。要回答你的真正問題,Java沒有你要找的那種語法,但你可以使用[設置](http://docs.oracle.com/javase/8/docs/api/java/ UTIL/Set.html)。 – ajb

回答

4

你可以定義你感興趣的可能值的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

我相信這是最好的單線解決方法。 。 –

0

如果您使用的是不會頻繁改變一些靜態屬性。我建議你應該將這些屬性填充到地圖中作爲相同的鍵和值。

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

你也可以寫這些屬性的一些文件,並使用Properties類在程序啓動時加載它們,並使用它。

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 
} 

這應該使用哈希集合的屁股,如果編譯器認爲是最有效的方式在幕後,但設置只構造一次。使用更簡潔的解決方案,每次執行測試時,您都很可能會構建並放棄代表臨時設置/列表的數據結構。

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