var*_*hal 9 java string optimization if-statement
情况:我正在检查文件名,文件名存储在一个String被调用的变量中str,根据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";
}
Run Code Online (Sandbox Code Playgroud)
问题:有没有更好的方法在java中缩短我的代码并且内存友好?
And*_*ner 20
使用LinkedHashMap<String, String>:
LinkedHashMap<String, String> mapping = new LinkedHashMap<>();
mapping.put("unsupported", "unsupported");
mapping.put("final_result", "final_result");
// ... etc
Run Code Online (Sandbox Code Playgroud)
然后迭代地图,直到找到匹配的键:
for (Map.Entry<String, String> entry : mapping.entrySet()) {
if (str.contains(entry.getKey()) {
mailType = entry.getValue();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的关键点是,LinkedHashMap保持插入顺序(不同HashMap),所以实际上你可以指定你想测试匹配的顺序(其它地图的实现就此别过,如番石榴的ImmutableMap,LinkedHashMap仅仅是一个你必须开箱).
如果你需要为外壳嵌套这个,你可以简单地应用相同的模式:
LinkedHashMap<String, LinkedHashMap<String, String>> outerMapping =
new LinkedHashMap<>();
outerMapping.put("template", mapping);
outerMapping.put("properties", someOtherMapping);
Run Code Online (Sandbox Code Playgroud)
然后以相同的方式迭代键:
for (Map.Entry<String, LinkedHashMap<String, String>> outerEntry : outerMapping.entrySet()) {
if (str.contains(outerEntry.getKey()) {
// Apply the iteration above, using outerEntry.getValue().
}
}
Run Code Online (Sandbox Code Playgroud)