今天做了个任务,用的是二重循环,结果老大来审查代码的时候被骂了。
为什么被骂?
以为代码写的low。
废话不多说,直接看代码。
错误的代码:
/**
* 给每一个新增柜员添加 bankId属性
*/
private void setBankId4PbUser(List<PbUser> userList) throws Exception{
List<Network> allNetWorks = netWorkService.loadAllNetwork("");
for(Network network : allNetWorks){
for(PbUser pbUser : userList){
String bankCode = pbUser.getBank_code();
if(network.getCode().equals(bankCode)){
pbUser.setBank_id(network.getId());
pbUser.setBank_name(network.getName());
break;
}
}
}
}
正确的代码:
/**
* 给每一个新增柜员添加 bankId属性
*/
private void setBankId4PbUser(List<PbUser> userList) throws Exception{
List<Network> allNetWorks = netWorkService.loadAllNetwork("");
Map<String,Network> allNetWorksMap = new HashMap<String, Network>();
for(Network network : allNetWorks){
allNetWorksMap.put(network.getCode(), network);
}
for(PbUser pbUser : userList){
Network network = allNetWorksMap.get(pbUser.getBank_code());
if(network == null){
throw new PbException("未找到柜员"+pbUser.getUser_code()+"对应的网点");
}
pbUser.setBank_id(network.getId());
pbUser.setBank_name(network.getName());
}
}
测试可得: 100用户100网点的条件下,正确代码比错误代码速度快70%。
分析:这个效率提升在不再需要使用遍历去匹配,而是新创建一个Map,将code作为键。提高了效率,还增加了阅读性。