侧边栏壁纸
  • 累计撰写 46 篇文章
  • 累计创建 38 个标签
  • 累计收到 2 条评论
隐藏侧边栏

Stream流将list中对象的属性按照小时进行分组

哒卟刘先生
2022-01-10 / 0 评论 / 0 点赞 / 90 阅读 / 756 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

需求是这样的,给了一个日期时间区间,一个对象list ;要统计这个时间段内每天某个小时段的数据量之和:如图
在这里插入图片描述

刚开始思路是把时间区间按每个小时进行拆分,得到这段时间每个小时的开始结束时间跟list对象进行比对后在进行整合计算,发现代码会很臃肿,用stream流就能完美优雅的解决这个问题。如下:

1,查出这个时间截点的所有数据

2,将list所有数据按小时进行分组;(精华所在)

list.stream().collect(Collectors.groupingBy(item -> new SimpleDateFormat("yyyy-MM-dd HH").format(item.getCreateTime())));

3,用正则匹配每个小时的对应的集合

  for (int i = 23; i >=0 ; i--) {
            Map xdMap = new HashMap();
            Map<String, List<EduRsrcVisitor>> visMap = list.stream().collect(Collectors.groupingBy(item -> new SimpleDateFormat("yyyy-MM-dd HH").format(item.getCreateTime())));
            List<EduRsrcVisitor> eduRsrcVisitors = new ArrayList<>();
            for (String s : visMap.keySet()) {
                if(Integer.parseInt(s.substring(s.length() - 1, s.length()))==i){
                    eduRsrcVisitors.addAll(visMap.get(s));
                }
            }
  }
0

评论区