从一个stream里面把数据先按areacode和month分组,然后按month倒排序,然后只取每组第一条数据,用java怎么实现
时间: 2024-10-18 16:10:47 浏览: 23
在Java中,你可以使用`Stream` API以及其提供的`collect`和`sorted`方法来实现这个需求。假设你有一个包含`AreaCode`, `Month`, 和其他数据的对象列表,可以按照以下步骤操作:
```java
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collectors;
// 假设你的对象类名为CallData,有areacode, month等字段
List<CallData> callDataList = ...; // 具有areacode和month属性的数据
// 使用Collectors.groupingBy和reducing方法来按areaCode和month分组,并获取第一条记录
Map<String, List<CallData>> groupedData = callDataList.stream()
.collect(Collectors.groupingBy(CallData::getAreaCode,
Collectors.partitioningBy(CallData::getMonth,
Collectors.toList())));
// 对每个列表按月份倒序
groupedData.forEach((areaCode, calls) -> {
calls.sort(Comparator.comparing(CallData::getMonth).reversed());
});
// 取每组的第一条记录
Map<String, CallData> result = groupedData.entrySet().stream()
.map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue().get(0)))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(result);
```
阅读全文