开发者

Java如何处理数据成为树状结构

开发者 https://www.devze.com 2024-08-10 11:58 出处:网络 作者: 骑猪撞地球QAQ
目录Java处理数据成为树状结构实现过程Java将查出来的数据拼树递归方法构建树总结Java处理数据成为树状结构
目录
  • Java处理数据成为树状结构
    • 实现过程
  • Java将查出来的数据拼树
    • 递归方法构建树
  • 总结

    Java处理数据成为树状结构

    如题所示,项目中需要将部分数据处理成为树状结http://www.devze.com

    实现过程

    注:也可以使用sql达到该目的,但此处数据不多,故在代码中处理,主要是sql处理不是很会

    	// 获取需要封装的数据
    	List<Data> dataAll = service.findAll();
        if (CollUtil.isEmpty(dataAll)) {
          return new ArrayList<>();
        }
        // 获取顶层目录 项目中上级编码为空则为一级目录
        List<Data> parentList = dataAll.stream()
            .filter(item -> ObjectUtil.isEmpty(item.getParentNumber())).collect(Collectors.toList());
    
        // 获取下级目录,上级编码不为空则非一级目录
        List<Data> childList = dataAll.stream()
            .filter(item -> ObjectUtil.isNotEmpty(item.getParentNumber())).collect(Collectors.toList());
    
        // 封编程客栈装树状结构
        return parentList.stream().map(item1 -> {
          Data chapterVo = new Data();
          BeanUtils.copyProperties(item1, chapterVo);
          List<Data> videoVoList = childList.stream()
              .filter(item2 -> item1.getBackgroundManagementCategoryNumber().equals(item2.getParentNumber()))
              .map(item3 -> {
                Data videoVo = new Data();
                BeanUtils.copyProperties(item3, videoVo);
                return videoVo;
              })
    		  .collect(Collectors.toList());
          chapterVo.setChildren(videoVoList);
          reandroidturn chapterVo;
        }).collect(Collectors.toList());
    

    Java将查出来的数据拼树

    递归方法构建树

    /**
    * 使用递归方法建树
    * @param  menuTrees  子节点集合 / 返回的数据
    * @return  List 
    */
    public static List<Dept> buildByRecursive(List<Dept> menuTrees) {
        List<Dept> trees = new ArrayList<>();
        for (Dept menuTree : menuTrees) {
        	//查找根节点
            if (menuTree.getPcode() == null) {
             trees.add(findChildren(menuTree,menuTrees));
     php        }
        }
        return trees;
    }
    /**
     * 递归查找子节点
     * @param menuTree  菜单数对象
     * @param menuTrees  子节点
     * @return MenuTree
     */
    private static Djsept findChildren(Dept menuTree,List<Dept> menuTrees){
        for (Dept it : menuTrees) {
            if(menuTree.getCode().equals(it.getPcode())) {
                if (menuTree.getChildren() == null) {
                 menuTree.setChildren(new ArrayList<>());
                }
                menuTree.getChildren().add(findChildren(it,menuTrees));
            }
        }
        return menuTree;
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号