记录lambda 和stream 使用方法

@Override
    public List<ProjectTimeTrackingResponseDTO> list() throws ServiceException {
        try {
             Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC,"createTime"));
            List<ProjectDO> projectDOS = projectDao.findAll();   查出所有 ProjectDO
            List<PersonnelDO> personnelDOS = personnelDao.findAll();   查出所有 PersonnelDO 
            List<ProjectTimeTrackingDO> timeTrackingDOS = projectTimeTrackingDao.findAll((r,q,c)->{
                Path<Boolean> deleted = r.get("deleted");
                return c.equal(deleted,false);
            },sort);
	     过滤 delete  查出所有 ProjectTimeTrackingDO  并且 转化为 ProjectTimeTrackingResponseDTO
            List<ProjectTimeTrackingResponseDTO> results = projectTimeTrackingMapper.from(timeTrackingDOS);
      以下步骤所做的事情是:因为ProjectTimeTrackingDO 没有ProjectName和PersonnelName ,而界面上需要显示 这两个信息,所以需要去别的表查
			for (ProjectTimeTrackingResponseDTO dto : results){   遍历 results 
      过滤一下之前查到的 所有 projectDOS   条件为: ProjectDO 的id 等于 ProjectTimeTrackingResponseDTO 的 ProjectId 。最终目的是把右边“对比完查找”到的结果(就是p的id等于dto的id的projectDOS的结果集)赋给左边的templist
				List<ProjectDO> templist = projectDOS.stream().filter(p -> p.getId().equals(dto.getProjectId())).collect(Collectors.toList());
                if (templist.size() > 0){
                    for (ProjectTimeTrackingResponseDTO responseDTO : results) {
  过滤一下之前查到的 所有 personnelDOS 条件为: personnelDOS 的id 等于 ProjectTimeTrackingResponseDTO 的 PersonnelId 
                        List<PersonnelDO> personnelDOList = personnelDOS.stream().filter(p -> p.getId().equals(dto.getPersonnelId())).collect(Collectors.toList());
	 重点!!: templist 是ProjectDO 
	       personnelDOList 是PersonnelDO  一个项目 包含多个 人员。所以 外层 for 是循环 Project ,内层 是 personnel
                        responseDTO.setProjectName(templist.get(0).getName());   获取查到的第一条 的name 字符段
                        responseDTO.setPersonnelName(personnelDOList.get(0).getName());
                    }
                }
            }
            return results;
        }catch (Exception ex){
            throw new ServiceException(ex);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值