在java中跟随if-else梯形图更好的替代方法是什么?

前端之家收集整理的这篇文章主要介绍了在java中跟随if-else梯形图更好的替代方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
情况:我正在检查文件名,文件名存储在一个名为str的String变量中,根据检查的条件if语句我正在设置名为mailType的变量的值.
if(str.contains("template"))
        {                   
          if(str.contains("unsupported"))
              mailType="unsupported";      
              else
                  if(str.contains("final_result"))                
                      mailType="final_result";            
                  else
                      if(str.contains("process_success"))
                          mailType="Process Success"; 
                      else
                          if(str.contains("receive"))                         
                              mailType="Receive";                         
                          else
                          if(str.contains("sen"))
                              mailType="sent"; 
                          else
                              if(str.contains("welcome"))
                                  mailType="welcome";
                              else
                                  if(str.contains("manual"))
                                     mailType="Manual";                    
        }       
        else                
if(str.contains("properties"))
        {

          if(str.contains("unsupported"))
              mailType="unsupported";      
              else
                  if(str.contains("final_result"))                
                      mailType="final_result";            
                  else
                      if(str.contains("process_success"))
                          mailType="Process Success"; 
                      else
                          if(str.contains("receive"))                         
                              mailType="Receive";                         
                          else
                          if(str.contains("sen"))
                              mailType="sent"; 
                          else
                              if(str.contains("welcome"))
                                  mailType="welcome";
                              else
                                  if(str.contains("manual"))
                                     mailType="Manual";

        }

问题:在java中有没有更好的方式来缩短我的代码并且内存友好?

解决方法

使用LinkedHashMap< String,String&gt ;::
LinkedHashMap<String,String> mapping = new LinkedHashMap<>();
mapping.put("unsupported","unsupported");
mapping.put("final_result","final_result");
// ... etc

然后迭代地图,直到找到匹配的键:

for (Map.Entry<String,String> entry : mapping.entrySet()) {
  if (str.contains(entry.getKey()) {
    mailType = entry.getValue();
    break;
  }
}

关键点在于LinkedHashMap保留插入顺序(与HashMap不同),因此您可以实际指定要测试匹配的顺序(其他地图实现也可以这样做,例如Guava’s ImmutableMap; LinkedHashMap只是一种盒子).

如果你需要嵌套外部的情况,你可以简单地应用相同的模式:

LinkedHashMap<String,LinkedHashMap<String,String>> outerMapping =
    new LinkedHashMap<>();
outerMapping.put("template",mapping);
outerMapping.put("properties",someOtherMapping);

然后以相同的方式迭代键:

for (Map.Entry<String,String>> outerEntry : outerMapping.entrySet()) {
  if (str.contains(outerEntry.getKey()) {
    // Apply the iteration above,using outerEntry.getValue().
  }
}
原文链接:https://www.f2er.com/java/122370.html

猜你在找的Java相关文章