List根据id分组并且获取每组最先创建日期的数据组成map
时间: 2024-06-01 17:09:48 浏览: 51
假设有如下List:
List<Data> dataList = new ArrayList<>();
dataList.add(new Data(1, "A", LocalDateTime.parse("2021-01-01T00:00:00")));
dataList.add(new Data(1, "B", LocalDateTime.parse("2021-01-02T00:00:00")));
dataList.add(new Data(2, "C", LocalDateTime.parse("2021-01-01T00:00:00")));
dataList.add(new Data(2, "D", LocalDateTime.parse("2021-01-03T00:00:00")));
dataList.add(new Data(2, "E", LocalDateTime.parse("2021-01-02T00:00:00")));
我们可以使用Java 8的Stream API来实现该功能:
Map<Integer, Data> result = dataList.stream()
.collect(Collectors.groupingBy(Data::getId, Collectors.collectingAndThen(
Collectors.minBy(Comparator.comparing(Data::getCreateTime)), Optional::get)));
其中,groupingBy根据id分组,然后使用collectingAndThen对每组数据进行处理,获取每组中最先创建的数据(即创建日期最小的数据),并将其组成map返回。最终结果为:
{1=Data{id=1, name='A', createTime=2021-01-01T00:00}, 2=Data{id=2, name='C', createTime=2021-01-01T00:00}}
阅读全文