stream流将List<Map<String,Object>>根据id分组,并将不同的数据合并为list<map>集合
时间: 2023-10-29 09:34:06 浏览: 167
stream流的简单使用
可以使用Java 8的Stream API通过Collectors.groupingBy()方法实现根据id分组,然后使用Collectors.mapping()方法将分组后的数据转换为List<Map<String, Object>>格式,最后使用Collectors.toList()方法将不同的数据合并为list<map>集合。示例代码如下:
```
List<Map<String, Object>> dataList = new ArrayList<>();
// 假设数据源已经准备好,存储在dataList中
Map<Object, List<Map<String, Object>>> resultMap = dataList.stream()
.collect(Collectors.groupingBy(map -> map.get("id")));
List<List<Map<String, Object>>> resultList = resultMap.values().stream()
.map(list -> list.stream()
.collect(Collectors.toMap(map -> map.keySet().iterator().next(), map -> map.values().iterator().next())))
.collect(Collectors.groupingBy(map -> map.get("id"), Collectors.mapping(Function.identity(), Collectors.toList())));
List<Map<String, Object>> finalResult = resultList.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
```
解释一下代码:
1. 使用Collectors.groupingBy()方法将List<Map<String, Object>>根据id分组,得到一个Map<Object, List<Map<String, Object>>>对象,其中key为id,value为对应id的数据集合。
2. 使用Collectors.mapping()方法将分组后的数据转换为List<Map<String, Object>>格式,其中map的key为id,value为对应id的数据集合中的第一个元素。
3. 再次使用Collectors.groupingBy()方法将List<Map<String, Object>>根据id分组,得到一个Map<Object, List<Map<String, Object>>>对象,其中key为id,value为对应id的所有数据集合。
4. 使用flatMap()方法将Map<Object, List<Map<String, Object>>>对象中的所有value合并为一个List<Map<String, Object>>集合。
5. 最后使用Collectors.toList()方法将List<Map<String, Object>>集合转换为list<map>集合,即最终的结果。
阅读全文