记录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);
        }
    }

猜你喜欢

转载自blog.csdn.net/zxcvb12zxcvb12/article/details/80743287