java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java处理数据成为树状结构

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

作者:骑猪撞地球QAQ

这篇文章主要介绍了Java如何处理数据成为树状结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java处理数据成为树状结构

如题所示,项目中需要将部分数据处理成为树状结构

实现过程

注:也可以使用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);
      return 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));
         }
    }
    return trees;
}
/**
 * 递归查找子节点
 * @param menuTree  菜单数对象
 * @param menuTrees  子节点
 * @return MenuTree
 */
private static Dept 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;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文