@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);
}
}
记录lambda 和stream 使用方法
最新推荐文章于 2024-01-17 11:56:56 发布