List<TrDevportVO> trDevportVOList 用java8转成map,value是一个常亮
时间: 2023-06-14 11:05:32 浏览: 85
可以使用Java 8的Stream API将`List<TrDevportVO>`转换为`Map<TrDevportVO, String>`,其中value是一个常量。代码示例如下:
```
Map<TrDevportVO, String> map = trDevportVOList.stream()
.collect(Collectors.toMap(Function.identity(), v -> "常量值"));
```
这里使用了`toMap`方法将`List`转换为`Map`,其中`Function.identity()`作为key的提取函数,表示使用`TrDevportVO`对象本身作为key;`v -> "常量值"`则表示使用常量字符串作为value。如果`List`中有重复的`TrDevportVO`对象,则会抛出`java.lang.IllegalStateException`异常,可以通过在`toMap`方法中传递第三个参数来指定去重策略。
相关问题
HashMap<String, List<TrDevportVO>> relayLinkAndPortListMap = new HashMap<>(); 遍历这个map
你可以使用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中的键值对。在循环体内,你可以根据需要对键和值进行操作。
for(Map.Entry<String, List<TrDevportVO>> entry : relayLinkAndPortListMap.entrySet()) { String key = entry.getKey(); List<TrDevportVO> values = entry.getValue(); List<DevPortReportEsDTO> esDTOS = new ArrayList<>(); for (TrDevportVO trDevportVO: values){ String tempKey = trDevportVO.getDevId() + trDevportVO.getPortName(); DevPortReportEsDTO reportEsDTO = reportEsDTOMap.get(tempKey); esDTOS.add(reportEsDTO); relayLinkAndPortListMap1.put(key,esDTOS); } System.out.println("Key: " + key); System.out.println("Value: " + values); } 这段代码有什么bug
这段代码存在一个逻辑错误,即在循环内部向 `relayLinkAndPortListMap1` 中添加元素时,没有考虑到同一 `key` 对应的 `esDTOS` 会被覆盖。正确的代码应该将 `relayLinkAndPortListMap1.put(key,esDTOS);` 放在循环外部,如下所示:
```
for(Map.Entry<String, List<TrDevportVO>> entry : relayLinkAndPortListMap.entrySet()) {
String key = entry.getKey();
List<TrDevportVO> values = entry.getValue();
List<DevPortReportEsDTO> esDTOS = new ArrayList<>();
for (TrDevportVO trDevportVO: values){
String tempKey = trDevportVO.getDevId() + trDevportVO.getPortName();
DevPortReportEsDTO reportEsDTO = reportEsDTOMap.get(tempKey);
esDTOS.add(reportEsDTO);
}
relayLinkAndPortListMap1.put(key,esDTOS);
System.out.println("Key: " + key);
System.out.println("Value: " + values);
}
```
阅读全文