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; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论