Как избежать множественных операторов if-else для проверки в Java

У меня много разных операторов if-else. Для оптимизации кода мне нужно написать одну функцию для всей логики if else. На данный момент моя структура кода приведена ниже.

входной запрос находится в JSONObject (org.json.simple.JSONObject), который имеет более 10 значений.

  String s = (String) inputObj.get("test");
  String s1 = (String) inputObj.get("test");
  String s2 = (String) inputObj.get("test");
  String s3 = (String) inputObj.get("test");
        if (s != null && s.trim().isEmpty()) {
            if (s1 != null && s1.trim().isEmpty()) {
                if (s2 != null && s2.trim().isEmpty()) {
                    if (s3 != null && s3.trim().isEmpty()) {
                        if (s4 != null && s4.trim().isEmpty()) {
                           ........
                        } else {
                          return;
                        }
                    } else {
                        return;
                    }
                } else {
                     return;
                }
            } else {
               return;
            }
        } else {
           return;
        }

Как избежать такого зацикливания и выдачи сообщения об ошибке обычным методом.

Заранее спасибо.

Вы изучали структуру проверки Java, такую ​​как javax.validation?

eckyputrady 22.03.2018 06:45

В javax.validation для каждого запроса я хочу создать bean-компонент и проверить его, верно? чтобы избежать этого, я получаю запрос как JSONObject.

Megala Perumal 22.03.2018 06:52

Вы можете объединить их все в одно if / else с помощью &&.

shmosel 22.03.2018 08:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
876
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Подумайте о добавлении всех ваших строк в массив или ArrayList строки и прохождение каждой записи в нем и проверьте их на нуль или пустоту.

вы можете объяснить на каком-нибудь примере?

Megala Perumal 22.03.2018 06:47

что мне очень помогает.

Megala Perumal 22.03.2018 10:38

Пример @Emre Acar - это то, что вам нужно

Aibek 23.03.2018 07:57

Вы можете попробовать это.

void main() {
    List<String> sList = new ArrayList<>();
    sList.add(inputObj.get("test"));
    sList.add(inputObj.get("test"));
    sList.add(inputObj.get("test"));
    sList.add(inputObj.get("test"));

    for(String s : sList){
        try {
            checkString(s);
        }catch (Exception e){
            //log or print the exception, however you like
        }
    }
}
void checkString(String s) throws Exception{
    if (s!= null && !s.trim().isEmpty()){
        //doStuff
    }else{
        throw new Exception("String is null or empty !!!");
    }       
}

Вы также должны проверить это.

Как я могу выбросить исключение, если имя не указано или пусто?

Megala Perumal 22.03.2018 07:32

@MegalaPerumal, кажется, я не понял, что вам нужно. Вы можете просто использовать throw new Exception ()

Emre Acar 22.03.2018 07:35

да, в JSONObject я получу весь ввод, мне нужно его проверить, и я хочу выбросить исключение для каждого поля. если у меня есть имя, то я считаю, что фамилия пуста. Хочу скинуть фамилию пустую. но в вашем коде я не могу выбросить исключение для всех отдельных полей

Megala Perumal 22.03.2018 07:46

отлично. Но я хочу выбросить, какая строка пуста. например Имя пусто, фамилия пуста, адрес электронной почты пуст. Как я могу сделать это в приведенном выше коде.

Megala Perumal 22.03.2018 07:54

@MegalaPerumal, я не собираюсь делать за тебя все домашние задания. Постарайтесь добиться прогресса самостоятельно.

Emre Acar 22.03.2018 07:57

Я согласен. Я не знаю, как вернуть индивидуальную проверку. по этой причине только я разместил вопрос.

Megala Perumal 22.03.2018 08:00
    public Integer checkIsEmapty(String checkingString){
        if (checkingString != null && !checkingString.trim().isEmpty()){
            return 1;
        }
        return 0;
    }

    public String method(){
        String s  = "";
        String s1 = "hi";
        String s2 = "java";
        String s3 = null;
        String s4 = null;
       Integer s1i = checkIsEmapty(s);
       Integer s2i = checkIsEmapty(s1);
       Integer s3i = checkIsEmapty(s2);
       Integer s4i = checkIsEmapty(s3);
       Integer s5i = checkIsEmapty(s4);

       Integer total = s1i + s2i + s3i + s4i + s5i;
       switch (total){
           case 1 :
               // To DO
           case 2 :
               // To DO


       }
    }
    in switch used to checking the value, U can pass binary and Integer also 

Как упоминал @Emre Acre,

List<String> sList = new ArrayList<>();
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));

boolean allDataValid = sList
        .stream()
        .allMatch(s -> s != null && s.trim().isEmpty());

if (allDataValid) {
    ......
} else {
    return;
}

так же я хочу проверить все переменные?

Megala Perumal 22.03.2018 07:28

Это не Акко -_-

Emre Acar 22.03.2018 07:33
Ответ принят как подходящий
public class YourClass{
    private boolean isBlankDataPresent(JSONObject inputObj, String[] keys) throws Exception {
        for (String key : keys) {
            String input = (String) inputObj.get(key);
            if ( input == null || input.trim().isEmpty())
                throw new Exception(key +" is Empty");
        }
        return false;
    }

    public boolean validateData(JSONObject inputObj, String[] keys) throws Exception {
        boolean isBlankDataPresent= isBlankDataPresent(inputObj, keys);
        if (!isBlankDataPresent) {
            // do Your Stuff and return true
        } 
    }
}

В этом случае я хочу добавить новый validateData () для всех полученных мной запросов?

Megala Perumal 22.03.2018 07:49

Если вам нужен общий метод, вы можете передать список ключей также методу validateData () и соответствующим образом проверить

Tino M Thomas 22.03.2018 07:57

Другие вопросы по теме