最近在IC轮岗,翻看了很多代码,发现需要优化的地方很多,下面我们看一段代码
这段代码,咋一看,还不错,考虑到了String的低效率,采用了StringBuilder,
但是请看红色部分代码,在开始为了过滤无效数据,对key做了合法性校验,其中一项是将key转换成int然后判断是否大于0,
校验通过后,开始循环处理内部的一个map的值,这样的话key在循环中又被进行了多次转换,
对这部分代码进行优化,结果如下:
public static String aliasMap2String(Map<String, Map<String, String>> aliasMap) {
if (aliasMap == null) {
return "";
}
StringBuilder nsb = new StringBuilder();
for (String key : aliasMap.keySet()) {
Map<String, String> vals = aliasMap.get(key);
if (StringUtil.isBlank(key) || [color=red]TBStringUtil.getInt(key)[/color] <= 0 || null == vals || vals.isEmpty()) continue;
for (String vid : vals.keySet()) {
String alias = vals.get(vid);
if (StringUtil.isBlank(vid) || TBStringUtil.getInt(vid) <= 0 || StringUtil.isBlank(alias)) continue;
nsb.append([color=red]TBStringUtil.getInt(key)[/color]).append(psubSp).append(TBStringUtil.getInt(vid));
nsb.append(psubSp).append(escapeForProp(alias));
nsb.append(pmainSp);
}
}
String alias = nsb.toString();
return alias;
}
这段代码,咋一看,还不错,考虑到了String的低效率,采用了StringBuilder,
但是请看红色部分代码,在开始为了过滤无效数据,对key做了合法性校验,其中一项是将key转换成int然后判断是否大于0,
校验通过后,开始循环处理内部的一个map的值,这样的话key在循环中又被进行了多次转换,
对这部分代码进行优化,结果如下:
public static String aliasMap2String(Map<String, Map<String, String>> aliasMap) {
if (aliasMap == null || aliasMap.isEmpty()) {
return "";
}
StringBuilder nsb = new StringBuilder();
for (String key : aliasMap.keySet()) {
Map<String, String> vals = aliasMap.get(key);
if (StringUtil.isBlank(key) || null == vals || vals.isEmpty()) continue;
int intKey = TBStringUtil.getInt(key);
if(intKey <= 0 ) continue;
for (String vid : vals.keySet()) {
String alias = vals.get(vid);
if (StringUtil.isBlank(vid) || StringUtil.isBlank(alias)) continue;
int intVid = TBStringUtil.getInt(vid);
if(intVid <= 0) continue;
nsb.append(intKey).append(psubSp).append(intVid);
nsb.append(psubSp).append(escapeForProp(alias));
nsb.append(pmainSp);
}
}
String alias = nsb.toString();
return alias;
}