将List集合的数据按时间分组存入Map里面

目前公司有这么一个需求,查询指定月份正常打卡出勤的人数。正常出勤指的是一天打两次卡的人员,如果一天就打了上午或者下午一次卡不算入正常出勤。

思路:
由于只有打卡的数据才会存入数据库中,而且一天最多打卡两次,不可能出现重复打卡,所以我们可以把指定月份的打卡数据全部查出来,然后通过打卡时间进行分组,存入Map中,key为打卡时间,value为打卡实体,这样子如果value存在两个list则说明这个人是正常出勤,一天打了两次卡。

		//正常出勤打卡次数
        int attendanceCount = 0;
		//查询指定月份用户所有的打卡数据
        List<SigninDTO> signinDO = signinMapper.getSignListByMonth(154, "2021-06");
     	//将打卡记录按时间进行分组,存入Map
        Map<Object, List<SigninDTO>> resultMap = new HashMap<>();
        for (SigninDTO signin : signinDO) {
            //该日期已存在,则放入该集合,signin.getTime()只需要年月日,时分秒无法进行分组
            if (resultMap.containsKey(signin.getTime())) {
                resultMap.get(signin.getTime()).add(signin);
            } else {    
            	//不存在,则新建日期key,用来存放数据
                List<SigninDTO> itemList= new ArrayList<>();
                itemList.add(signin);
                resultMap.put(signin.getTime(),itemList);
            }
        }
        for (List<SigninDTO> signinDTOList: resultMap.values()){
        	//两个List则代表正常出勤
            if (signinDTOList.size() == 2){
                attendanceCount ++;
            }
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值