Java8时间段分组

根据统计的时间段进行分组,例如当天的时间段0点到6点、6点到12点,12点到18点的统计数量,这时候繁杂的for循环会导致代码量激增,切不够明了。我们可以用Java8的链式方式来进行分组

hour:带表要隔的时间

时间最好用LocalDateTime

根据小时

LocalTime.MAX//获取当前时间的结束

LocalTime.MIN//获取当前时间的开始

map = list.stream().collect(Collectors.groupingBy(o-> o.getAlarmTime().getHour()/hour));

根据分钟

map = list.stream().collect(Collectors.groupingBy(o-> o.getAlarmTime().getMinute()()/10));

 按周统计

LocalDate date = ...;
// WeekFields.ISO = 一星期从周一开始算, 其它的请自己摸索.
WeekFields weekFields = WeekFields.ISO; 
int weekNumber = date.get(weekFields.weekOfWeekBasedYear());
map = list.stream().collect(Collectors.groupingBy(o-> o.getAlarmTime().get(weekFields.weekOfMonth()) ));
或者
map = list.stream().collect(Collectors.groupingBy(o-> o.getAlarmTime().get(weekFields.weekOfWeekBasedYear()) ));

  

除了weekOfWeekBasedYear,还有一个weekOfYear,它们两个的具体区别为:

如果一周涉及到了跨年,如2021.12.31是周五,2022.01.01是周六,这涉及到了年份的变化。
weekOfWeekBasedYear会把2021.12.31、2022.01.01(新年第一天)看做是2021年的最后一周,即看做同一周;

weekOfYear则会把2021.12.31看做是2021年的最后一周,把2022.01.01看最是2022年的第一周,即当做两周。

posted @ 2023-01-18 15:43  张亮java  阅读(1692)  评论(0编辑  收藏  举报