HashMap<String, List<TrDevportVO>> relayLinkAndPortListMap = new HashMap<>(); 遍历这个map
时间: 2023-07-09 11:05:56 浏览: 83
你可以使用Java 8中的Lambda表达式或者foreach循环来遍历这个Map并打印出其中的键值对。
使用Lambda表达式:
```
relayLinkAndPortListMap.forEach((key, value) -> {
System.out.println("Key: " + key);
System.out.println("Value: " + value);
});
```
使用foreach循环:
```
for(Map.Entry<String, List<TrDevportVO>> entry : relayLinkAndPortListMap.entrySet()) {
String key = entry.getKey();
List<TrDevportVO> value = entry.getValue();
System.out.println("Key: " + key);
System.out.println("Value: " + value);
}
```
其中,Lambda表达式中的key和value分别代表Map中的键和值,foreach循环中的entry代表Map中的键值对。在循环体内,你可以根据需要对键和值进行操作。
相关问题
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`。
// es查询返回的数据组成map,key为devId+portName,value为DevPortReportEsDTO对象 Map<String, DevPortReportEsDTO> reportEsDTOMap = list.stream() .collect(Collectors.toMap(reportEsDTO -> reportEsDTO.getMo_id() + reportEsDTO.getObject_id(), reportEsDTO -> reportEsDTO)); Map<String, List<PortReportResultVo>> relayLinkAndPortMap = new HashMap<>(); // 遍历链路组下包含的端口 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); } 优化这段代码
可以考虑使用Java 8的流式操作来简化代码,如下所示:
```
Map<String, List<PortReportResultVo>> relayLinkAndPortMap = relayLinkAndPortListMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream().map(trDevportVO -> {
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);
return reportResultVo;
}).collect(Collectors.toList())
));
```
这段代码使用了`stream()`方法将`relayLinkAndPortListMap`的`entrySet()`转化为一个流,然后使用`Collectors.toMap()`方法将每个`entry`转化为对应的`key`和`value`,其中`key`和原来的代码一样,`value`使用`stream()`方法将`entry`的`value`列表转化为另一个流,然后使用`map()`方法将每个`TrDevportVO`对象转化为对应的`PortReportResultVo`对象,最后使用`collect()`方法将所有`PortReportResultVo`对象转化为一个列表。
阅读全文