Java统计各个时段上的人数
场景重现:
我们将一天分割成24份,每份间隔1小时,[0-1],[1-2],[2-3]…,[23-0]
根据考勤时间,然后我们统计一下,在各个时段上加班的人数。
实现步骤:
步骤一、时间段分割: 将个人加班时间,分割成多个,匹配上面的24个时段。
步骤二、将每个人分割后的时间片段汇总到一个集合中,然后统计出每个时间片段的总数。
步骤一:
给你个开始时间,一个结束时间,将这个时间间隔分割,匹配到上面的24个时间段上。
比如,
开始时间:“2019-09-23 10:30”,
结束时间:“2019-09-23 19:30”
要求分割结果为:[10-11],[11-12],[12-13],[13-14],[14-15],[15-16],[16-17],[17-18],[18-19],[19-20]
实现方法:
/**
* 【开始时间,结束时间】把时间段按每1小时切割一次
* 我们把一天切割为24段,将给定的时间段进行切割,匹配到这些时间段上。
* @param startDateTime 开始时间
* @param endDateTime 结束时间
* @return
*/
public static List<String> cutInterval(String startDateTime, String endDateTime){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime localDateTime1 =LocalDateTime.parse(startDateTime, formatter);
LocalDateTime end =LocalDateTime.parse(endDateTime, formatter);
//秒数置为0
LocalDateTime start = localDateTime1.withMinute(0);
System.out.println(localDateTime1);
String str = start.format(formatter);
System.out.println(str);
//时间段分割
List<String> list = new ArrayList<>();
while(start.plusHours(1).isBefore(end.plusHours(1)))
{
list.add(start.getHour()+"-"+start.plusHours(1).getHour());
start=start.plusHours(1);
}
list.forEach(item-> System.out.println(item));
return list;
}

public static void main(String[] args) {
List<String> list = cutInterval("2019-09-24 17:30","2019-09-24 22:00");
System.out.println("====================================");
List<String> list2 = cutInterval("2019-09-24 17:30","2019-09-24 22:00");
System.out.println("====================================");
List<String> list3 = cutInterval("2019-09-23 17:30","2019-09-23 23:30");
System.out.println("====================================");
List<String> list4 = cutInterval("2019-09-24 18:00","2019-09-25 23:00");
System.out.println("====================================");
List<String> list5 = cutInterval("2019-09-23 10:00","2019-09-23 19:30");
System.out.println("*****************************************************");
List<String> resultList = new ArrayList<>();
resultList.addAll(list);
resultList.addAll(list2);
resultList.addAll(list3);
resultList.addAll(list4);
resultList.addAll(list5);
ListUtils.getCountMap(resultList);
}
步骤二:
就是统计List集合中,各个时间片段的总个数。
这里使用java8中的stream,来进行分组统计。
/**
* 分组,统计list中每个元素出现的次数
* @param list
* @return
*/
public static Map<String,Long> getCountMap(List<String> list){
Map<String,Long> map = list.stream().collect(Collectors.groupingBy(p->p,Collectors.counting()));
map.forEach((k,v) -> System.out.println(k + ":" +v));
return map;
}


654

被折叠的 条评论
为什么被折叠?



