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; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。