Map<String, List<PortReportResultVo>> relayLinkAndPortMap = new HashMap<>(); for (Map.Entry<String, List<PortReportResultVo>> entry : relayLinkAndPortMap.entrySet()) { // key为链路组 String key = entry.getKey(); // value是这个链路组下的端口详情数据,已经查过es并且组装完成,链路组查询接口这个对这个链路下的端口做汇总,链路组导出不需要汇总,前面已经封装好了,这里可以自由选择是否汇总 List<PortReportResultVo> values = entry.getValue(); RelayLinkReport relayLinkReport = linkGroupDevPortMap.get(key); for (PortReportResultVo trDevportVO: values){ this.setRelayLinkTotalValue(relayLinkReport,trDevportVO); } } 优化这段代码
时间: 2023-12-25 08:03:21 浏览: 70
可以考虑使用Java8的Stream API来优化这段代码:
```
relayLinkAndPortMap.forEach((key, values) -> {
RelayLinkReport relayLinkReport = linkGroupDevPortMap.get(key);
values.forEach(trDevportVO -> setRelayLinkTotalValue(relayLinkReport, trDevportVO));
});
```
使用forEach遍历map,对于每个entry,直接获取链路组的报告对象,然后使用forEach遍历该entry中的端口详情数据,调用setRelayLinkTotalValue方法设置链路总值即可。这样代码更加简洁易懂,并且使用了Java8的Stream API,使代码更具可读性。
相关问题
Map<String, Map<String, List<String>>> dataMap2 = new HashMap<String, Map<String, List<String>>>(map);怎么遍历
可以使用双重循环遍历,首先遍历外层的`Map`,获取每一个内层的`Map`,再遍历内层的`Map`,获取其中的`List`。
以下是示例代码:
```
for (Map.Entry<String, Map<String, List<String>>> entry : dataMap2.entrySet()) {
String key1 = entry.getKey();
Map<String, List<String>> map2 = entry.getValue();
for (Map.Entry<String, List<String>> entry2 : map2.entrySet()) {
String key2 = entry2.getKey();
List<String> list = entry2.getValue();
System.out.println("外层key:" + key1 + ",内层key:" + key2 + ",list:" + list);
}
}
```
其中,`entrySet()`方法可以获取`Map`中所有键值对的集合,每个键值对都是一个`Map.Entry`对象,包含了键和值两部分。通过`getKey()`方法可以获取键,通过`getValue()`方法可以获取值。因为内层的值是一个`Map`,所以需要再次使用`entrySet()`方法遍历内层的`Map`。
Map<String, List<PortReportResultVo>> relayLinkAndPortMap = new HashMap<>(); 遍历这个map,value为要导出的数据,都在一个sheet页中分分成多块内容,每块内容的表头可以自定义为2行,用easyExcel实现详细代码,包括导包
请参考以下代码:
```
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public class ExcelExporter {
public static void export(Map<String, List<PortReportResultVo>> relayLinkAndPortMap) throws IOException {
ExcelWriterBuilder writerBuilder = EasyExcel.write("output.xlsx");
for (Map.Entry<String, List<PortReportResultVo>> entry : relayLinkAndPortMap.entrySet()) {
String sheetName = entry.getKey();
List<PortReportResultVo> data = entry.getValue();
WriteSheet sheet = EasyExcel.writerSheet(sheetName).build();
// 写入表头
sheet.setHead(createHeader());
// 写入数据
writerBuilder.sheet(sheetName)
.head(createHeader())
.registerWriteHandler(new CustomizedCellStyleStrategy()) // 自定义单元格样式
.doWrite(data);
}
writerBuilder.build().finish();
}
private static List<List<String>> createHeader() {
List<List<String>> header = new ArrayList<>();
header.add(Arrays.asList("列1", "列2", "列3"));
header.add(Arrays.asList("列1备注", "列2备注", "列3备注"));
return header;
}
}
```
其中,`PortReportResultVo` 为要导出的数据类型,`CustomizedCellStyleStrategy` 是自定义的单元格样式策略,可以根据需要进行修改。
需要导入的包有:
```
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
```
阅读全文