优化代码List<ZdcPower> zdcPowers = zdcPowerMapper.selectZdcPower(date); Map<String ,HashSet<String>> map= new HashMap<>(); for(ZdcPower z:zdcPowers){ if(StrKit.isNotEmpty(z.getUserCode())){ for(String userCode:z.getUserCode().split(",")){ if(StrKit.isNotEmpty(z.getOfficeCode())){ for(String officeCode:z.getOfficeCode().split(",")){ //不为空 if(map.containsKey(userCode)){ map.get(userCode).add(officeCode); }else{ HashSet<String> officeCodeHasSet = new HashSet<>(); officeCodeHasSet.add(officeCode); map.put(userCode,officeCodeHasSet); } } } } } }
时间: 2024-02-10 19:06:08 浏览: 57
这段代码的功能是将查询得到的ZdcPower列表按照用户代码和部门代码分组,其中一个用户代码对应多个部门代码。这样的代码优化可以从以下几个方面入手:
1. 将多层嵌套的for循环转化为流式编程方式,提高代码可读性和简洁性;
2. 使用Java8的新特性来简化代码,比如使用Stream API的groupingBy方法实现分组;
3. 避免重复创建HashMap对象,可以提前设置HashMap的初始容量和负载因子;
4. 将字符串的判断逻辑封装成工具类方法,提高代码的重用性。
下面是优化后的代码示例:
```
List<ZdcPower> zdcPowers = zdcPowerMapper.selectZdcPower(date);
Map<String, Set<String>> map = new HashMap<>(zdcPowers.size());
zdcPowers.stream()
.filter(z -> StrKit.isNotEmpty(z.getUserCode()) && StrKit.isNotEmpty(z.getOfficeCode()))
.forEach(z -> {
for (String userCode : z.getUserCode().split(",")) {
map.computeIfAbsent(userCode, k -> new HashSet<>())
.addAll(Arrays.asList(z.getOfficeCode().split(",")));
}
});
```
以上代码中使用了流式编程方式,将多层嵌套的for循环转化为forEach和computeIfAbsent等方法的链式调用。使用computeIfAbsent方法可以避免重复创建HashMap对象,提高代码执行效率。同时,使用Lambda表达式和方法引用等新特性,可以使代码更加简洁易读。
阅读全文