示例表结构
解决思路:
1、先查询出所有要分类的数据,以List存储
2、通过Java8的新特性stream来处理
3、通过递归获取子项目的List
4、要在返回实体中增加子项目
public class ProjectVO extends Project { /** * 子项目 */ private List<ProjectVO> children; // setter 和getter方法 }
//查询出所有分类数据
List<ProjectVO> projectVOList = projectMapper.selectByUciDbId(projectVO);
return projectVOList.stream().filter(vo -> "0".equals(vo.getpParentId()))
.peek(vo -> vo.setChildren(getChildList(vo, projectVOList)))
.collect(Collectors.toList());
/** * 根据当前类别,找出子类,并通过递归找出子类的子类 * * @param projectVO * @param projectVOList * @return */ private List<ProjectVO> getChildList(ProjectVO projectVO, List<ProjectVO> projectVOList) { return projectVOList.stream().filter(vo -> vo.getpParentId().equals(projectVO.getpId())) .peek(vo -> vo.setChildren(getChildList(vo, projectVOList))) .collect(Collectors.toList()); }