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