广州新塘网页设计培训,黄冈seo推广优势,俄罗斯搜索引擎入口 yandex,网站建设高端培训最近挺忙#xff0c;一直在做项目#xff0c;然后有个树形目录结构需要返回给前端#xff0c;这里给大家说一下实现的思路。具体达到的效果类似#xff1a;一级目录A#xff1a;二级目录A#xff1a;三级目录#xff1a;四级目录#xff1a;文件.txt二级目录B#xff…最近挺忙一直在做项目然后有个树形目录结构需要返回给前端这里给大家说一下实现的思路。具体达到的效果类似一级目录A二级目录A三级目录四级目录文件.txt二级目录B文件1.txt一级目录B文件2.txt表结构(没有把我代码的所有表结构都贴上根据自身业务参考实现逻辑)a、目录表ID NAME PID1 一级目录2 二级目录 13 三级目录 24 三级目录 25 一级目录b、文件目录表ID FileName PID1 a.txt 12 a.txt 33 a.txt 24 a.txt 5下面看代码实现Controller方法 把两个表的数据查出来publicApiResult getDirectoryStructure(HttpServletRequest request){List docListVo new ArrayList();List doclist documentServiceImpl.selectDocumentList();List dirlist directoryStructureServiceImpl.selectDirStrList();if(doclist.size() 0){docListVoTreeStructureUtil.getVolists(dirlist,doclist);}return new ApiResult(ApiResult.STATE_SUCCESS,success,docListVo);}TreeStructureUtil文档树形目录结构工具类public classTreeStructureUtil {public static List getVolists(List dirlist, Listdoclist){List listvo new ArrayList();List dirlistPen new ArrayList();//一级目录//获取没有目录的文件跟一级目录同级for(int i0;idocument ddoclist.get(i);if (d.getdSId() null) {DocumentListVo docvo newDocumentListVo();docvo.setName(d.getName());docvo.setHashCode(d.getHashCode());docvo.setUpdateTime(d.getUpdateTime());listvo.add(docvo);}}if(dirlist.size() 0){//获取一级目录for(int j0;jDirectoryStructure dirdirlist.get(j);if(dir.getPid() null){dirlistPen.add(dir);}}//根据一级目录获取子目录和文件if(dirlistPen.size() 0){for(int k 0;kDirectoryStructure dirdirlist.get(k);DocumentListVo docvo newDocumentListVo();docvo.setName(dir.getName());List d getVoDrenlist(dir.getId(),dirlist,doclist);//子目录if(d.size() 1){for(int i 0;idocument docdoclist.get(i);if(doc.getdSId() dir.getId()){DocumentListVo docvo1 newDocumentListVo();docvo1.setName(doc.getName());docvo1.setHashCode(doc.getHashCode());docvo1.setUpdateTime(doc.getUpdateTime());d.add(docvo1);}}}docvo.setList(d);listvo.add(docvo);}}}returnlistvo;}/*** 递归算法获取子目录和文件*paramid*paramdirlist*paramdoclist*return*/public static List getVoDrenlist(Long id ,List dirlist,Listdoclist){List listvo new ArrayList();for(int j0;jDirectoryStructure dirdirlist.get(j);if(dir.getPid() id){DocumentListVo docvo newDocumentListVo();docvo.setName(dir.getName());docvo.setList(getVoDrenlist(dir.getId(),dirlist,doclist));listvo.add(docvo);}//循环完当前目录级去看当前级下面有没有文件if(j (dirlist.size()-1)){for(int i 0;idocument docdoclist.get(i);if(doc.getdSId() id){DocumentListVo docvo1 newDocumentListVo();docvo1.setName(doc.getName());docvo1.setHashCode(doc.getHashCode());docvo1.setUpdateTime(doc.getUpdateTime());listvo.add(docvo1);}}}}returnlistvo;}}最终前端拿到的结构这样的 有点多字体缩小了这样无论多少级 Java代码也可以变量出来只要理顺逻辑使用递归是比较简单的。技术QQ群216868740