Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替代if-else语句或建议最佳方法_Java - Fatal编程技术网

Java 替代if-else语句或建议最佳方法

Java 替代if-else语句或建议最佳方法,java,Java,UI上有3个不同的用户输入字段,如文本框和下拉列表。用户可以使用三个输入字段中的任何一个来搜索表,或者通过提供不同的输入字段组合来缩小结果集。我使用if-else语句使用这三个字段来实现我的逻辑,但是问题是,如果有很多if-else语句,代码看起来非常难看,如果在UI中添加了一个字段,那么我必须检查if-else语句的更多组合。如果有人告诉我如何在这些场景中遵循最佳实践或更好的方法,我真的很感激 我的代码: public boolean filterResults(UserInput

UI上有3个不同的用户输入字段,如文本框和下拉列表。用户可以使用三个输入字段中的任何一个来搜索表,或者通过提供不同的输入字段组合来缩小结果集。我使用if-else语句使用这三个字段来实现我的逻辑,但是问题是,如果有很多if-else语句,代码看起来非常难看,如果在UI中添加了一个字段,那么我必须检查if-else语句的更多组合。如果有人告诉我如何在这些场景中遵循最佳实践或更好的方法,我真的很感激

我的代码:

      public boolean filterResults(UserInputs userInputs){

            String firstName = userInputs.getFirstName();
            String lastName = userInputs.getLastName();
            String phoneNumber = userInputs.getNumber();

                  //**search only by First Name**
                 if((firstName!=null && firstName!="") 
                    && (lastName==null || lastName=="" )
                   && phoneNumber==null || phoneNumber ==""){

                    //logic to narrow down the result set based on condition met input values
                     list =DAO.getService(firstName);
                      return true;
                       }else if((lastName!=null && lastName!="")// **search only by Last Name**
                                  && (firstName== null || firstName == "")
                                   && (phoneNumber==null || phoneNumber == "")){

                             //logic to narrow down the result set based on condition met input values
 list =DAO.getService(lastName);                          return true;
                       }else if((phoneNumber!=null && phoneNumber!="")// **Search Only by PhoneNumber**
                                               && (lastName==null || lastName=="" )
                                                && (firstName== null || firstName == "")){
        //logic to narrow down the result set based on condition met input values
                    list =DAO.getService(phoneNumber);                                                return true;
                               }else if((firstName!=null && firstName!="")// **Search by all params**.
                                      &&(lastName!=null && lastName!="")
                                       && (phoneNumber!=null && phoneNumber!="")){
        //logic to narrow down the result set based on condition met input values
                      list =DAO.getService(firstName, lastName, phoneNumber);
                                                       return true;
                            }else if((firstName!=null && firstName!="")//**Search by first&last name.**
                                && (lastName!=null || lastName!="" )
                                && (phoneNumber==null || phoneNumber =="")){
                           //logic to narrow down the result set based on condition met input values
                                 list =DAO.getService(firstName, lastName);

                                 return true;
                                 }else if (.......){// **Search by last name & phone number.**
                                       return true;
                                   }else if (.........){// **Search by phone number & first name.**
                                    return true;}



                     return false;

            }

现在,您的逻辑相当于这一行:

return (firstName != null && !firstName.isEmpty()) ||
    (lastName != null && !lastName.isEmpty()) ||
    (phoneNumber != null && !phoneNumber.isEmpty());

看起来您正在为搜索条件的每个可能组合实现一个搜索方法。你不应该那样做。相反,过滤元素的方法应测试每个标准:

public List<Element> search(List<Element> allElements, UserInputs criteria) {
    List<Element> acceptedElements = new ArrayList<>();
    for (Element e : allElements) {
        if (isAccepted(e, criteria)) {
            acceptedElements.add(e);
        }
    }
    return acceptedElements;
}

private boolean isAccepted(Element e, UserInputs criteria) {
    String firstName = criteria.getFirstName();
    if (isCriterionFilled(firstName) && !hasFirstName(e, firstName)) {
        return false;
    }

    String lastName = criteria.getLastName();
    if (isCriterionFilled(lastName) && !hasLastName(e, lastName)) {
        return false;
    }

    String phone = criteria.getPhone();
    if (isCriterionFilled(phone) && !hasPhone(e, phone)) {
        return false;
    }

    return true;
}

第一件事是封装foo=null&&foo!=习语把它放在助手方法中。同样,使用!foo.isEmpty而不是foo!=。或者更好,看看吧。。如果所有字段都为空,则只返回false?@OliCharlesworth-要添加此内容,请查看此链接,了解使用Apache或Guava等库的一些解决方案,如果您的项目中有这些库的话。读取字符串[]criteriarr={criteria.getFirstName,criteria.getLastName;criteria.getPhone;}很抱歉,各位没有正确回答这个问题。我的问题的重点是采用不同于if-else的方法。请不要担心该方法会返回什么。我是否需要使用if-else语句检查这种情况下输入字段数量的所有排列和组合。有没有更好的方法。面向对象可能是?@user3810342:你读过我的答案了吗?你难道不明白它恰恰避免了检查所有的排列吗?@JBNizet如果输入字段为空怎么办。在查询时,我也必须考虑空值。你的方法满足这些要求吗?如果是,我想我得到了答案。例如,如果所有值都为空或null,我必须返回表的整个结果集。这就是IsCriterionFiledString标准方法检查的内容。如果用户已填写标准,则返回true,否则返回false。