普通LIST列表转换为Tree

来源:互联网 发布:lua for windows 编辑:程序博客网 时间:2024/06/04 19:51

普通LIST列表转换为Tree


本文转载至:http://blog.csdn.net/qw7501312/article/details/51544230


public class XMGLTaskDTO {    String name;    Long parentId;    Long id;    List<XMGLTaskDTO > childrenTaskList;  }  


//重新将list转为tree-----------------方式1(循环)


List<XMGLTaskDTO > nodeList = new ArrayList();      for(XMGLTaskDTO node1 : taskDTOList){//taskDTOList 是数据库获取的List列表数据或者来自其他数据源的List                boolean mark = false;              for(XMGLTaskDTO node2 : taskDTOList){                  if(node1.getParentId()!=null && node1.getParentId().equals(node2.getId())){                      mark = true;                      if(node2.getChildrenTaskList() == null)                          node2.setChildrenTaskList(new ArrayList<XMGLTaskDTO>());                      node2.getChildrenTaskList().add(node1);                      break;                  }              }              if(!mark){                  nodeList.add(node1);              }          }  


//重新将list转为tree-----------------方式2(递归)


List<XMGLTaskDTO > nodeList = new ArrayList();    nodeList = constructTaskDTOToTree(taskDTOList );//taskDTOList 是数据库获取的List列表数据或者来自其他数据源的List  /**      * 将List重组为数      * @param taskDTOList DTO集合      * @return List<XMGLTaskDTO>      */      public List<XMGLTaskDTO> constructTaskDTOToTree(List<XMGLTaskDTO> taskDTOList){          //key:父节点ID value:子节点集合          Map<Long,List<XMGLTaskDTO>> taskDTOMap = new HashMap<>();            //将List重组到Map中          taskDTOList.forEach(dto -> {              List<XMGLTaskDTO> tempTaskDTOList = taskDTOMap.get(dto.getParentId());              if (tempTaskDTOList == null){                  tempTaskDTOList = new ArrayList<XMGLTaskDTO>();                  taskDTOMap.put(dto.getParentId(),tempTaskDTOList);              }              tempTaskDTOList.add(dto);          });            //顶级节点集合          List<XMGLTaskDTO> resultTaskDTOList = taskDTOMap.get(null);            recurTaskDTOList(resultTaskDTOList,taskDTOMap);            return resultTaskDTOList;      }        /**      * 将重组好的Map进行树形结构处理      * @param taskDTOList 父节点集合(不一定是顶级节点 因为会递归调用)      * @param sourceMap 组装好的Map集合      */      public void recurTaskDTOList(List<XMGLTaskDTO> taskDTOList,Map<Long,List<XMGLTaskDTO>> sourceMap){          if(CollectionUtils.isEmpty(taskDTOList))              return;          taskDTOList.forEach(dto -> {              dto.setChildrenTaskList(sourceMap.get(dto.getId()));              recurTaskDTOList(dto.getChildrenTaskList(),sourceMap);          });      }  




原创粉丝点击