Java 重构Sonar Qube中的多个Else
下面的代码,我有多个其他如果条件。因此,当我使用sonar cube运行代码时,它会说“重构此方法以将其认知复杂性从31降低到允许的15”。有人能帮我将认知复杂性从31降低到15吗Java 重构Sonar Qube中的多个Else,java,sonarqube-scan,Java,Sonarqube Scan,下面的代码,我有多个其他如果条件。因此,当我使用sonar cube运行代码时,它会说“重构此方法以将其认知复杂性从31降低到允许的15”。有人能帮我将认知复杂性从31降低到15吗 private final String method1(){ if(!StringUtils.isEmpty(stringvariable)){ if(stringvariable.equals("str1") || stringvariable.equal
private final String method1(){
if(!StringUtils.isEmpty(stringvariable)){
if(stringvariable.equals("str1") || stringvariable.equals("str2") || stringvariable.equals("str3") ){
Stringvariable1 = "val1";
}
else if(stringvariable.equals("str4") || stringvariable.equals("str5") ){
Stringvariable1 = "val2";
}
else if(stringvariable.equals("str6") || stringvariable.equals("str7") || stringvariable.equals("str8")){
Stringvariable1 = "val3";
}
else if(stringvariable.equals("str9") || stringvariable.equals("str10") || stringvariable.equals("str11")){
Stringvariable1 = "val4";
}
else if(stringvariable.equals("str12") || stringvariable.equals("str13") || stringvariable.equals("str14")){
Stringvariable1 = "val5";
}
else if(stringvariable.equals("str15")){
Stringvariable1 = "val6";
}
else if(stringvariable.equals("str16") || stringvariable.equals("str17") || stringvariable.equals("str18") || stringvariable.equals("str19")){
Stringvariable1 = "val7";
}
else if(stringvariable.equals("str20") || stringvariable.equals("str21") ||stringvariable.equals("str22")){
Stringvariable1 = "val8";
}
else if(stringvariable.equals("str23") || stringvariable.equals("str24") || stringvariable.equals("str25") || stringvariable.equals("str26")){
Stringvariable1 = "val9";
}
else if(stringvariable.equals("str27") || stringvariable.equals("str28")){
Stringvariable1 = "val10";
}
else if(stringvariable.equals("str29") || stringvariable.equals("str30")){
Stringvariable1 = "val11";
}
else if(stringvariable.equals("str31")){
Stringvariable1 = "val12";
}
else if(stringvariable.equals("str32")){
Stringvariable1 = "val13";
}
else if(stringvariable.equals("str33") || stringvariable.equals("str34") || stringvariable.equals("str35") || stringvariable.equals("str36")){
Stringvariable1 = "val14";
}
else if(stringvariable.equals("str37")){
Stringvariable1 = "val15";
}
else if(StringUtils.isEmpty(stringvariable) ){
Stringvariable1 = "val16";
}
else {
Stringvariable1 = "val17";
}
}
else{
Stringvariable1 = "val18";
}
return Stringvariable1;
}
如果您希望在每个案例中匹配多组字符串,那么最好使用某种映射函数,该函数具有一组匹配值,然后是相关的结果
Map<Set<String>, String> mappedOutcomes = new HashMap<>();
Set<String> matches = new HashSet<String>();
matches.add("match1");
mathces.add("match2);
mappedOutcomes.add(mySet, "str1");
String stringVariable = "somequery";
for(Map.Entry<Set, String> entry in mappedOutcomes.entrySet()){
// Bear in mind case-sensitivity here for hashset, you may want to convert all strings to lower/upper case
if(entry.getKey().contains(stringVariable)){
return entry.getValue();
}
}
// Else if you get here, no match was found
Map-mappedOutlets=newhashmap();
Set matches=新HashSet();
匹配。添加(“匹配1”);
添加(“匹配2”);
添加(mySet,“str1”);
String stringVariable=“somequery”;
for(MappedOutlets.entrySet()中的Map.Entry条目){
//请记住,对于hashset,这里区分大小写,您可能希望将所有字符串转换为小写/大写
if(entry.getKey().contains(stringVariable)){
返回条目.getValue();
}
}
//否则如果你到了这里,就找不到匹配的
您可以更进一步,编写一个包含匹配集和结果的自定义包装类,然后只存储对象的列表。这比迭代映射的条目集要好。尝试使用Switch语句