Java 如何重写此方法以删除多余的if语句?
如何重写此方法以最大限度地提高代码效率并最小化代码长度 注意:Java 如何重写此方法以删除多余的if语句?,java,performance,Java,Performance,如何重写此方法以最大限度地提高代码效率并最小化代码长度 注意:标题是之前定义的常量 private static URL getURL(String OS, String type, String size) { String prefix = ""; String prefixLarge = ""; if (type.equals("image")) { prefix = HEADER + "/image";
标题
是之前定义的常量
private static URL getURL(String OS, String type, String size) {
String prefix = "";
String prefixLarge = "";
if (type.equals("image")) {
prefix = HEADER + "/image";
prefixLarge = HEADER + "/image_large";
} else {
prefix = HEADER + "/file";
prefixLarge = HEADER + "/file_raw";
}
String suffix = ".zip";
String url = "";
if (OS.contains("Win7.32bit")) {
// win7-32bit system
url = prefix + "Win7.32bit" + suffix;
if (size.contains("origin")) {
url = prefixLarge + "Win7.32bit" + suffix;
}
} else if (OS.contains("Win7.64bit")) {
// win7-64bit system
url = prefix + "Win7.64bit" + suffix;
if (size.contains("origin")) {
url = prefixLarge + "Win7.64bit" + suffix;
}
} else if (OS.contains("WinXP")) {
// winxp-32bit system
url = prefix + "WinXP" + suffix;
if (size.contains("origin")) {
url = prefixLarge + "WinXP" + suffix;
}
} else if (OS.contains("WinXP.64bit")) {
// winxp-64bit system
url = prefix + "WinXP.64bit" + suffix;
if (size.contains("origin")) {
url = prefixLarge + "WinXP.64bit" + suffix;
}
} else if (OS.contains("10.04")) {
// ubuntu10.04 system
url = prefix + "ubuntu10.04" + suffix;
if (size.contains("origin")) {
url = prefixLarge + "ubuntu10.04" + suffix;
}
} else if (OS.contains("12.04")) {
// ubuntu12.04 system
url = prefix + "ubuntu12.04" + suffix;
if (size.contains("origin")) {
url = prefixLarge + "ubuntu12.04" + suffix;
}
}
return url;
}
创建一个包含所有操作系统名称的
字符串数组。然后使用for
循环迭代该数组
像这样:
String[]osNames={“Win7.32位”、“Win7.64位”、“10.04位”};
字符串[]osTypes={“Win7.32位”、“Win7.64位”、“ubuntu10.04”};
for(int i=0;i
这是要删除if-else条件的代码的一部分。注意break语句 private static Map osMap=new HashMap();
private static Map <String, String> osMap = new HashMap<String, String>();
static {
osMap.put("Win7.32bit", "Win7.32bit");
osMap.put("Win7.64bit", "Win7.64bit");
osMap.put("WinXP", "WinXP");
osMap.put("WinXP.64bit", "WinXP.64bit");
osMap.put("10.04", "ubuntu10.04");
osMap.put("12.04", "ubuntu12.04");
}
private static URL getURL(String os, String type, String size) {
String prefix = "";
String prefixLarge = "";
if (type.equals("image")) {
prefix = HEADER + "/image";
prefixLarge = HEADER + "/image_large";
} else {
prefix = HEADER + "/file";
prefixLarge = HEADER + "/file_raw";
}
String suffix = ".zip";
String url = "";
String systemType = "";
for(String key : osMap.keySet()) {
if(os.contains(key) {
url = prefix + osMap.get(key) + suffix;
if (size.contains("origin")) {
url = prefixLarge + osMap.get(key) + suffix;
}
break;
}
}
return url;
}
静止的{
put(“Win7.32位”、“Win7.32位”);
put(“Win7.64位”、“Win7.64位”);
osMap.put(“WinXP”、“WinXP”);
put(“WinXP.64位”、“WinXP.64位”);
osMap.put(“10.04”、“ubuntu10.04”);
osMap.put(“12.04”、“ubuntu12.04”);
}
私有静态URL getURL(字符串操作系统、字符串类型、字符串大小){
字符串前缀=”;
字符串前缀arge=“”;
if(type.equals(“image”)){
前缀=标题+“/image”;
prefixLarge=标题+“/image\u large”;
}否则{
前缀=头+“/文件”;
prefixLarge=HEADER+“/file\u raw”;
}
字符串后缀=“.zip”;
字符串url=“”;
字符串systemType=“”;
for(字符串键:osMap.keySet()){
如果(os.contains)(key){
url=前缀+osMap.get(key)+后缀;
if(尺寸包含(“原点”)){
url=prefixLarge+osMap.get(key)+后缀;
}
打破
}
}
返回url;
}
你考虑过使用switch吗?@KyelJmD我认为switch
在这种情况下不起作用。@smit@KyelJmD…但是在switch语句中包含?对此表示怀疑。@MoritzPetersen正要评论同样的事情。@MoritzPetersen@Pankaj,你们是对的,只是想指出jdk7
允许字符串在s中witch
也许他发现url的结构不完全相同。比较ubuntu12.10
和12.10
。然而,我是其中一个投票人:)嗯,可能是这样,如果是这样,你需要再添加2-3行代码。但我们也应该给实际的开发人员留下一些东西将String[]osNames
替换为Map-osSubstringToFullName
,你就开始工作了是的,我在提交这篇文章后才看到Moritz的答案-基本上是一样的,但使用的是Map而不是并行数组;首先,我认为我将实现留给to,但后来我看到了其他实现尝试,并决定提供我自己的;-)+1因为与并行阵列相比,我更喜欢map方法。并行阵列总是有失步的风险,特别是如果添加了更多的操作系统和版本,这真是一项糟糕的工作。帽子可以激发你的想象力和创造力。还有改进的余地,例如使用StringBuilder
而不是String
。连接URL类似于(意味着:没有那么多临时变量)。可以使用贴图
或其他类型的关联对象,而不是并行数组。我的意图是向您展示如何消除许多代码重复。我认为在Java中,保持低代码冗余比首先优化性能更重要。
private static Map <String, String> osMap = new HashMap<String, String>();
static {
osMap.put("Win7.32bit", "Win7.32bit");
osMap.put("Win7.64bit", "Win7.64bit");
osMap.put("WinXP", "WinXP");
osMap.put("WinXP.64bit", "WinXP.64bit");
osMap.put("10.04", "ubuntu10.04");
osMap.put("12.04", "ubuntu12.04");
}
private static URL getURL(String os, String type, String size) {
String prefix = "";
String prefixLarge = "";
if (type.equals("image")) {
prefix = HEADER + "/image";
prefixLarge = HEADER + "/image_large";
} else {
prefix = HEADER + "/file";
prefixLarge = HEADER + "/file_raw";
}
String suffix = ".zip";
String url = "";
String systemType = "";
for(String key : osMap.keySet()) {
if(os.contains(key) {
url = prefix + osMap.get(key) + suffix;
if (size.contains("origin")) {
url = prefixLarge + osMap.get(key) + suffix;
}
break;
}
}
return url;
}
private static URL getURL(String OS, String type, String size) {
return HEADER
+
size.contains("origin")
? ((type.equals("image") ? "/image_large" : "/file_raw" ))
: ((type.equals("image") ? "/image" : "/file" ))
+
OS.contains("Win7.32bit") ? "Win7.32bit" :
OS.contains("Win7.64bit") ? "Win7.64bit" :
OS.contains("WinXP.64bit") ? "WinXP.64bit" :
OS.contains("WinXP") ? "WinXP" :
OS.contains("10.04") ? "ubuntu10.04" :
OS.contains("12.04") ? "ubuntu12.04" :
""
+
".zip";
}