一个map key是userId value是含有userId和工时dayWork的对象的list怎么统计出按userId分组的工时和中的最大和最小的工时和
时间: 2024-09-06 12:03:15 浏览: 33
awstools:该存储库包含我编写的可与AWS一起玩的工具-移至https
要统计一个Map中key为userId,value为包含(userId, dayWork)对的List,其中dayWork是一个表示工时的对象列表,你可以按照以下步骤操作:
1. 首先,遍历Map。对于每个userId及其对应的dayWork List,你需要处理每个用户的工时数据。
2. 对于每个userId,创建一个新的DayWork对象或者一个Pair(如果语言支持),其中包含用户ID、总工时(所有dayWork的累加)、最小工时和最大工时。初始化总工时为0,最小和最大工时分别为null。
3. 然后遍历dayWork List,将每个dayWork的工时累加到总工时,并更新最小值和最大值。如果当前dayWork的工时小于现有最小值,则更新最小值;如果大于现有最大值,则更新最大值。
4. 在遍历结束后,你就得到了一个按userId分组的工时统计数据,包括总工时、最小工时和最大工时。
5. 如果需要结果以特定的数据结构返回,比如HashMap或自定义的UserStats对象,记得在循环外部创建并存储这些统计信息。
例如,在Java中,可以这样做:
```java
// 假设DayWork有一个hour属性
Map<String, List<DayWork>> userWorkLists = ...; // 你的原始map
Map<String, UserStats> userStats = new HashMap<>();
for (Map.Entry<String, List<DayWork>> entry : userWorkLists.entrySet()) {
String userId = entry.getKey();
List<DayWork> dayWorks = entry.getValue();
DayWork totalWork = new DayWork(userId, 0);
DayWork minMaxWork = null;
for (DayWork work : dayWorks) {
totalWork.hour += work.hour;
if (minMaxWork == null || work.hour < minMaxWork.hour) {
minMaxWork = work;
} else if (work.hour > minMaxWork.hour) {
minMaxWork = new DayWork(userId, work.hour); // 更新最大值
}
}
userStats.put(userId, new UserStats(userId, totalWork.hour, minMaxWork));
}
阅读全文