我有一个数组,长度为3但它可能包含或不包含3索引中的数据,我必须根据数组中的数据追加三个查询。让我举一个例子。
array[0]="A";
array[1]="B";
array[2]="C";
String strqry1 = "so and so";
String strqry2 = "so and so";
String strqry3 = "so ans so";
String mainQuery = "";
int arrayLength = array.legth;
if(arrayLength == 1 ){
if(array[0].equals("A")){
mainQuery = strqry1 ;
}else if(array[0].equals("B")){
mainQuery = strqry2 ;
}else if(array[0].equals("c")){
mainQuery = strqry3 ;
}
}
if(arrayLength == 2){
if(array[0].equals("A") && array[1].equals("B")){
mainQuery = strqry1 +"union all"+ strqry2 ;
}else if(array[0].equals("A") && array[1].equals("C")){
mainQuery = strqry1 +"union all"+ strqry3 ;
}else if(array[0].equals("B") && array[1].equals("C")){
mainQuery = strqry2 +"union all"+ strqry3 ;
}
}
if(arrayLength == 3){
if(array[0].equals("A") && array[1].equals("B") && array[2].equals("C")){
mainQuery = strqry1 +"union all"+strqry2 +"union all"+ strqry3 ;
}
}
我需要建议,我是否需要为3组If条件编写这样的排列和组合。我可以优化代码的任何其他方式。请建议我。
答案 0 :(得分:2)
我建议制作检查一个值的方法,如果值匹配则返回查询。喜欢这样。
String check(String value) {
if("A".equals(value)) return strqry1;
if("B".equals(value)) return strqry2;
if("C".equals(value)) return strqry3;
return null;
}
然后在循环中调用此函数:
String result = "";
for(String value: array) {
String qry = check(value);
if(qry==null) continue;
if(!gry.isEmpty()) gry += "union all";
result += qry;
}
答案 1 :(得分:1)
如果输入值的顺序,要检查的常量和结果查询之间存在相关性,您也可以将它们作为数组处理:
//constant values to check
String[] constants={"A", "B", "C"};
String[] queries={"so and so 1", "so and so 2", "so and so 3"};
String mainQuery = "";
String union="";
for(int i=0; i<array.length && i<constants.length; i++) {
if(array[i].equals(constants[i])) {
mainQuery=mainQuery+union+queries[i]+" ";
union=" union all ";
}
}
System.out.println(mainQuery);
可以将新的常量和查询附加到它们上(作为输入参数或对象属性...)。此外,如果您可以将它们定义为外部可配置值(通过注入,属性文件等),则可以在不重写和重新部署代码的情况下更改它们。
答案 2 :(得分:1)
你必须使用数组吗?使用Java Hashmap做你想做的事情似乎更合理:Link&#34; A&#34; strqry1,&#34; B&#34;到strqry2和&#34; C&#34; strqry3。
import java.lang.StringBuilder;
import java.util.Hashmap;
Map<String, String> myQuery = new Hashmap<String,String>();
myQuery.put("A", strqry1);
myQuery.put("B", strqry2);
myQuery.put("C", strqry3);
然后构建所需的查询:
StringBuilder sb = new StringBuilder();
String queryString;
queryString = myQuery.get(array[0]);
if(queryString != null) {
sb.append(queryString);
}
// now skip the first entry, proceed the rest
for(int i=1; i<array.length; i++) {
sb.append(" union all "); // If you want to build a query, watch the whitespaces
sb.append(queryString);
}
这将构造必要的字符串,而没有任何多余的&#34; union all&#34;在字符串中。您的结果查询将存储在StringBuilder sb。
中