Below code that i have has multiple else if conditions. Due to this when i run code using sonar cube it is saying "Refactor this method to reduce its Cognitive Complexity from 31 to the 15 allowed." Can Some one help me to reduce cognitive complexity from 31 to 15.
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;
}
Given you want to match multiple sets of strings per case, you'd probably be better off using some kind of mapping function that has a
Set<String>of matching values, and then the associated outcome.You could go one step further and write a custom wrapper class containing your set of matches and the outcome, and then just store a List of whatever your object is. This would be better than iterating over a Map's entry set.