2017-02-18 4 views
1

Сегодня я наткнулся писать этот код:Как реализовать в пункте в 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. . 
} 
. 
. 
. 

Есть ли способ или обходной путь для достижения этого?

+0

Вы можете просто указать свой оператор 'if (false) {...}'. Пожалуйста, прочитайте http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java, чтобы понять, почему. Чтобы ответить на ваш реальный вопрос, Java не имеет такого синтаксиса, который вы ищете, но вы можете использовать [Set] (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 
} 

Вы также можете записать эти свойства в файл и загрузить их с помощью класса свойств при запуске программы и использовать его.

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"})); 
Смежные вопросы