两个List<Map<String,double>>含有重名的key通过Stream.concat合并后的结果案例
时间: 2024-09-20 20:16:10 浏览: 38
Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并
当两个 `List<Map<String, Double>>` 需要通过 `Stream.concat()` 合并,并且它们可能包含相同的键(key),Java 中可以使用 Stream 的特性结合 Collectors 来处理这种情况。这里的关键是使用 Collectors.toMap() 函数,它可以将键值对收集到一个新的 Map 中,并自动解决键冲突。
假设我们有两个列表,list1 和 list2,它们都是一些 `Map` 对象,例如:
```java
List<Map<String, Double>> list1 = Arrays.asList(
Maps.of("name", 1.0, "age", 25.0),
Maps.of("name", 2.0, "score", 90.0)
);
List<Map<String, Double>> list2 = Arrays.asList(
Maps.of("name", 3.0, "country", "USA"),
Maps.of("age", 27.0, "city", "New York")
);
```
我们可以使用以下代码合并它们并处理键冲突:
```java
Map<String, Double> combinedMap = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.toMap(
map -> map.keySet().iterator().next(), // 使用第一个键作为新的键
Function.identity(),
(oldValue, newValue) -> oldValue, // 如果键重复,取旧值(即list1中的)
LinkedHashMap::new // 创建一个有序的链表链接映射,以便于查看键冲突顺序
));
```
在这个例子中,`combinedMap` 将会是:
```java
{
"name": 1.0, // 使用 list1 中的值,因为 name 在 list1 中第一次出现
"age": 27.0,
"score": 90.0,
"country": "USA",
"city": "New York"
}
```
阅读全文