代码优化2-准备工作在循环外进行

最近在IC轮岗,翻看了很多代码,发现需要优化的地方很多,下面我们看一段代码


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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值