Java List<Map>类型的数据按id排序后按date分组,分组后之前的顺序不要变
时间: 2024-11-09 20:25:39 浏览: 16
在Java中,如果你有一个`List<Map<String, Object>>`类型的集合,其中包含一些map,每个map都有"id"和"date"键值对,并需要按照'id'进行排序,然后基于'date'进行分组并保持原来的顺序,你可以使用Java 8的Stream API来处理。以下是步骤:
首先,你需要定义一个Comparator来根据'id'进行排序:
```java
import java.util.Comparator;
Comparator<Map<String, Object>> idComparator = Comparator.comparingMap((Map<String, Object> map) -> (String) map.get("id"));
```
接下来,使用`sorted()`方法排序列表:
```java
List<Map<String, Object>> sortedList = yourList.stream()
.sorted(idComparator)
.collect(Collectors.toList());
```
然后,为了按'date'分组并保持原顺序,你可以创建一个新的`TreeMap`,它会自动按key进行排序,这里的key就是日期:
```java
Map<String, List<Map<String, Object>>> groupedMap = new TreeMap<>(Comparator.comparingMap(map -> (Date) map.get("date")));
```
最后,遍历已排序的列表并将元素添加到对应的group中,同时保留原有的顺序:
```java
sortedList.forEach(map -> {
String dateKey = (String) map.get("date");
groupedMap.computeIfAbsent(dateKey, k -> new ArrayList<>()).add(map);
});
```
现在,`groupedMap`应该包含了按照'id'排序后,每个'date'对应的map列表,而且原始列表的顺序得到了保持。
阅读全文