List根据id分组并且获取每组最新创建日期date的数据组成map
时间: 2024-04-30 20:23:08 浏览: 59
根据日期获取最近几天的日期
假设有以下数据结构:
```
List<Map<String, Object>> dataList = new ArrayList<>();
Map<String, Object> data1 = new HashMap<>();
data1.put("id", 1);
data1.put("name", "John");
data1.put("date", "2021-01-01");
dataList.add(data1);
Map<String, Object> data2 = new HashMap<>();
data2.put("id", 2);
data2.put("name", "Mary");
data2.put("date", "2021-02-01");
dataList.add(data2);
Map<String, Object> data3 = new HashMap<>();
data3.put("id", 1);
data3.put("name", "Bob");
data3.put("date", "2021-03-01");
dataList.add(data3);
```
使用Java 8的流式操作和Collectors.groupingBy和Collectors.maxBy方法可以实现按id分组并获取每组最新创建日期的数据。
```
Map<Integer, Map<String, Object>> resultMap = dataList.stream()
.collect(Collectors.groupingBy(data -> (Integer) data.get("id"),
Collectors.maxBy(Comparator.comparing(data -> (String) data.get("date")))))
.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().orElse(null)));
```
上述代码将数据列表按id分组,并使用maxBy方法获取每组中最新创建日期的数据。最后使用toMap方法将结果转换成Map<Integer, Map<String, Object>>,其中key为id,value为每组最新日期的数据。结果如下:
```
{1={id=1, name=Bob, date=2021-03-01}, 2={id=2, name=Mary, date=2021-02-01}}
```
阅读全文