:的java比较多个值,并找到我需要找到最匹配的员工工资在数据库记录作为最佳匹配
Name: City: State:
A (null) (null)
A (null) DEL
(null) (null) (null)
A SAKET DEL
比赛顺序应该是:
NAME =名称,状态=州,城市=城市
2. NAME =名,STATE =州,城市= NULL
NAME =名称,状态= NULL,CITY = NULL
4. NAME = NULL,州= NULL,CITY = NULL
意味着如果在一排,所有属性相符的 - 它应选择,如果我们没有那种数据,我们应该去下一个最好的选择,如选择州和城市为NULL等
我的代码如下,给我正确的结果,但我需要一个更高效办法。
private static BigDecimal getsalaryForBestMatch(ResultSet results, EmployeeRq request) throws Exception{
BigDecimal salary = null;
BigDecimal salaryWithState = null;
BigDecimal salaryWithName = null;
BigDecimal salaryWithNoMatch = null;
while (results.next()) {
String billerName = results.getString("EMP_NAME") != null ? results.getString("EMP_NAME").trim() : null;
String city = results.getString("CITY") != null ? results.getString("CITY").trim() : null;
String state = results.getString("STATE") != null ? results.getString("STATE").trim() : null;
BigDecimal salaryRslt = null;
if(results.getString("SALARY") != null){
salaryRslt = BigDecimal.valueOf(results.getDouble("SALARY"));
}
if(billerName != null && !billerName.equals("") && billerName.equals(request.getBillPaymentsalaryCalculateInfo().getBillerName())){
if(city != null && !city.equals("") && city.equals(request.getMsgRqHdr().getCity()) &&
state != null && !state.equals("") && state.equalsIgnoreCase(request.getMsgRqHdr().getstate())){
salary = salaryRslt;
break;
} else if((city == null || city.equals("")) && state != null && !state.equals("") &&
state.equalsIgnoreCase(request.getMsgRqHdr().getState())){
salaryWithState = salaryRslt;
} else if((city == null || city.equals("")) && (state == null || state.equals(""))){
salaryWithName = salaryRslt;
}
} else if((billerName == null || billerName.equals("")) && (city == null || city.equals("")) &&
(state == null || state.equals(""))){
salaryWithNoMatch = salaryRslt;
}
}
if(salary != null){
return salary;
} else if(salaryWithState != null){
salary = salaryWithState;
} else if(salaryWithName != null){
salary = salaryWithName;
} else if(salaryWithNoMatch != null){
salary = salaryWithNoMatch;
}
return salary;
}
编辑:我不想使用3个额外的变量:salaryWithState,salaryWithName,salaryWithNoMatch。
这可能会更好Code Review – JonK
Use-StringUtils.isBlank()。它将以单镜头检查空白,空白和空字符串。这将在一定程度上简化您的代码。 –
@KeyurPanchal或OP可能会创建一个静态方法来做到这一点,如果他不想使用库类..但它是一个很好的建议,但 – Yahya