// 遍历链路组下包含的端口 for(Map.Entry<String, List<TrDevportVO>> entry : relayLinkAndPortListMap.entrySet()) { String key = entry.getKey(); List<TrDevportVO> values = entry.getValue(); List<PortReportResultVo> resultVoList = new ArrayList<>(); for (TrDevportVO trDevportVO: values){ String tempKey = trDevportVO.getDevId() + trDevportVO.getPortName(); DevPortReportEsDTO reportEsDTO = reportEsDTOMap.get(tempKey); PortReportResultVo reportResultVo = new PortReportResultVo(); BeanUtil.copyProperties(trDevportVO,reportResultVo); reportResultVo.setPortBandwidth(trDevportVO.getBandwidth()); BeanUtil.copyProperties(reportEsDTO,reportResultVo); resultVoList.add(reportResultVo); } relayLinkAndPortMap.put(key,resultVoList); } 优化这段代码
时间: 2023-12-16 07:06:10 浏览: 60
这段代码主要是遍历一个包含链路组和端口列表的Map,然后将每个端口与一个DevPortReportEsDTO对象进行比对并将结果存入一个PortReportResultVo对象中,最后将所有结果存入一个新的Map中。可以考虑以下优化方式:
1. 使用Lambda表达式替代传统的for循环,可以使代码更为简洁易读。
2. 考虑在遍历链路组和端口列表时,将每个端口对应的DevPortReportEsDTO对象提前存入一个Map中,这样就不必在内层循环中重复获取。
3. 在创建新的PortReportResultVo对象时,使用构造函数而非BeanUtil.copyProperties()方法,可以提高代码执行效率。
优化后的代码示例如下:
```
relayLinkAndPortListMap.forEach((key, values) -> {
List<PortReportResultVo> resultVoList = new ArrayList<>();
Map<String, DevPortReportEsDTO> reportEsDTOMap = new HashMap<>();
values.forEach(trDevportVO -> {
String tempKey = trDevportVO.getDevId() + trDevportVO.getPortName();
reportEsDTOMap.put(tempKey, reportEsDTO);
});
values.forEach(trDevportVO -> {
String tempKey = trDevportVO.getDevId() + trDevportVO.getPortName();
DevPortReportEsDTO reportEsDTO = reportEsDTOMap.get(tempKey);
PortReportResultVo reportResultVo = new PortReportResultVo(trDevportVO, reportEsDTO);
reportResultVo.setPortBandwidth(trDevportVO.getBandwidth());
resultVoList.add(reportResultVo);
});
relayLinkAndPortMap.put(key, resultVoList);
});
```
阅读全文