Java List<Map>类型的数据按date分组,key也要按照之前的顺序排不要变
时间: 2024-11-09 09:25:22 浏览: 4
在Java中,如果你有一个List<Map<String, Object>>类型的集合,其中每个Map代表一个数据项,包含日期(date)和其他键值对,你可以通过Stream API结合Collectors来实现按日期分组并保持原始键值顺序。这里是一个示例:
```java
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
List<Map<String, Object>> dataList = ... // 你的数据列表
// 创建一个新的List<Map<String, List<Object>>>,其中外层Map的key是日期,value是对应日期内的元素列表
List<Map<String, List<Object>>> groupedData = dataList.stream()
.collect(Collectors.groupingBy(map -> ((LocalDate) map.get("date")),
Collectors.mapping(map -> new ArrayList<>(map.values()), Collectors.toList()))
```
这会创建一个新的结构,其中每个内部Map的键仍然是日期,而对应的value是按日期排序的一个对象列表,保留了原来Map中key-value的顺序。
如果你想保持原始Map的键的顺序,因为`Collectors.toList()`默认不会保证插入顺序,可以使用`LinkedHashMap`作为中间容器:
```java
List<LinkedHashMap<String, List<Object>>> groupedDataLinked = dataList.stream()
.collect(Collectors.groupingBy(map -> ((LocalDate) map.get("date")),
Collectors.toCollection(LinkedHashMap::new)
.thenCollect(Collectors.mapping(map -> new ArrayList<>(map.values()), Collectors.toList()))
));
```
现在,每个内层LinkedHashMap将维持插入顺序。
阅读全文