List<LinkedHashMap<String, Object>> dateMapList map中的key为列名,value为数据,请将list中列名相同的key做合并,bigdecimal的类型用加法做合并,其他类型的默认取第一条数据
时间: 2024-05-03 18:17:27 浏览: 88
可以使用Java Streams来完成这个任务。首先,我们可以通过Collectors.groupingBy()方法将List中的Map按照列名进行分组,然后对于每一组中的Map,我们可以通过Collectors.toMap()方法将相同列名的数据进行合并。对于bigdecimal类型,我们可以使用reduce()方法将它们进行加法合并。以下是实现代码:
```java
List<LinkedHashMap<String, Object>> mergedList = dateMapList.stream()
.collect(Collectors.groupingBy(map -> map.keySet().toString()))
.values().stream()
.map(list -> list.stream()
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(v1, v2) -> v1 instanceof BigDecimal ? ((BigDecimal) v1).add((BigDecimal) v2) : v1)))
.collect(Collectors.toList());
```
首先,我们使用groupingBy()方法将List中的Map按照列名进行分组,然后使用values()方法获取每一组中的Map集合。对于每一组中的Map集合,我们使用flatMap()方法将其转换成一个流,然后使用toMap()方法将相同列名的数据进行合并。对于bigdecimal类型的数据,我们使用reduce()方法将它们进行加法合并。最后,我们使用toList()方法将所有合并后的Map集合转换成List返回。
阅读全文