书籍目录设计,递归案例,得到目录地址,得到目录整体结构
目录数据库设计
ftp上传文件时,想上传到book_id = 1 and directory_id = 9 的目录下面,
目录结构应该为
1/9/
天官赐福/第四卷/
//得到绝对地址public ServerResponse<String> getAbsoluteAddress(Integer bookId,Integer directoryId){List<BookDirectory> bookDirectoryList = Lists.newArrayList();BookDirectory bookDirectory = bookDirectoryMapper.getDirByBookIdAndDirectoryId(bookId,directoryId);if(bookDirectory == null){return ServerResponse.createByErrorMessage("参数错误");}bookDirectoryList = getParentById(bookDirectoryList,bookId,bookDirectory.getDirectoryId());String absoluteAddressStr = "";for(int i = bookDirectoryList.size()-1;i >= 0;i--){BookDirectory bookDirectoryItem = bookDirectoryList.get(i);absoluteAddressStr+=(bookDirectoryItem.getDirectoryName()+"/");}return ServerResponse.createBySucess(absoluteAddressStr);}/*** 递归得到当前目录的父目录,将当前目录的parentId当做下次查找的directoryId* @param bookDirectoryList* @param bookId* @Param directoryId* @return*/private List<BookDirectory> getParentById(List<BookDirectory> bookDirectoryList, Integer bookId,Integer directoryId){BookDirectory bookDirectory = bookDirectoryMapper.getDirByBookIdAndDirectoryId(bookId,directoryId);if(bookDirectory == null){return bookDirectoryList;}else {bookDirectoryList.add(bookDirectory);getParentById(bookDirectoryList,bookId,bookDirectory.getParentId());return bookDirectoryList;}}
测试
@Testpublic void getAbsoluteAddress(){ServerResponse response = iBookDirectoryService.getAbsoluteAddress(1,9);if(response.isSuccess()){System.out.println(response.getData());}}
得到整体目录结构
/*** ---A* --a* --b* --c* ---B* --a* --b* ---C* @return*//*** 得到目录并按照parentId排序* @param bookId* @return*/public ServerResponse<List<BookDirectory>> getBookDir(Integer bookId){if(bookId == null){return ServerResponse.createByErrorMessage("参数错误");}BookDirectory bookDirectory = bookDirectoryMapper.getDirRootByBookId(bookId);if(bookDirectory == null){return ServerResponse.createByErrorMessage("目录为空");}List<BookDirectory> resultBookDirList = Lists.newArrayList();//重新排序resultBookDirList.add(bookDirectory);List<BookDirectory> bookDirectoryListItem = bookDirectoryMapper.getDirByBookIdAndParentId(bookId,bookDirectory.getDirectoryId());for(BookDirectory bookDirectoryItem:bookDirectoryListItem){resultBookDirList.add(bookDirectoryItem);resultBookDirList.addAll(sortDir(Lists.newArrayList(),bookDirectoryItem));}if(CollectionUtils.isEmpty(resultBookDirList)){return ServerResponse.createByErrorMessage("目录错误或该书籍暂无内容");}return ServerResponse.createBySucess(resultBookDirList);}/*** 递归,得到目录并排序,把当前的directoryId作为下次查找的parentId* @param bookDirectoryList* @param bookDirectory* @return*/private List<BookDirectory> sortDir(List<BookDirectory> bookDirectoryList,BookDirectory bookDirectory){//递归结束条件:以bookDirectory.getDirectoryId()作为parentId查询,结果为空,即结束List<BookDirectory> bookDirectoryListOld = bookDirectoryMapper.getDirByBookIdAndParentId(bookDirectory.getBookId(),bookDirectory.getDirectoryId());if(CollectionUtils.isEmpty(bookDirectoryListOld)){return bookDirectoryList;}else {for(BookDirectory bookDirectoryItem:bookDirectoryListOld){bookDirectoryList.add(bookDirectoryItem);sortDir(bookDirectoryList,bookDirectoryItem);}return bookDirectoryList;}}
测试
@Testpublic void getBookDir() {ServerResponse<List<BookDirectory>> response = iBookDirectoryService.getBookDir(1);if(response.isSuccess()){List<BookDirectory> bookDirectoryList = response.getData();for(BookDirectory bookDirectory:bookDirectoryList){System.out.println(bookDirectory.getDirectoryName());}}}
书籍目录设计,递归案例,得到目录地址,得到目录整体结构相关推荐
- Vue.js 源码目录设计(二)
Vue.js 的源码都在 src 目录下,其目录结构如下. src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台的支持 ├── se ...
- 设计一个shell程序,在/userdata目录下建立50个目录,并对每个目录给754权限!
设计一个Shell程序,在/userdata目录下建立50个目录,即user1-user50,并设置每个目录的权限,其中其他用户的权限为:读:文件所有者的权限为:读.写.执行:文件所有者所在组的权限为 ...
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...
- Java 目录操作一(递归创建目录、删除目录、判断目录是否为空、判断文件是否隐藏、获取目录大小、在指定目录中查找文件)
递归创建目录 import java.io.File;public class Main {public static void main(String[] args) {String directo ...
- java基础—采用递归的方式来获取相关目录下的子目录的名称
采用递归的方式来获取相关目录下的子目录的名称 import java.io.File;//采用递归的方式来获取D盘下myjava目录下的所有子目录的名称 public class FileListDe ...
- matlab 30案例 目录,MATLAB-智能算法30个案例分析-终极版(带目录).doc
MATLAB-智能算法30个案例分析-终极版(带目录) MATLAB 智能算法30个案例分析(终极版) 1?基于遗传算法的TSP算法(王辉)? 2?基于遗传算法和非线性规划的函数寻优算法(史峰)? 3 ...
- vue assets图片_Vue实战—如何细化Vue项目目录设计(2)
通过上一篇文章我们了解了Vue项目核心文件(src)以及在内的各个文件的职能. 接下来我们进一步细化Vue项目的目录设计: 在开发项目的时候前端避免不了请求后端接口.为了同时开发,我们知道的通常会用到 ...
- java bean目录_树形目录的递归实现数据库+jsp+javabean
树形目录的递归实现(一)数据库+jsp+javabean class cn {//连接数据库,这里以MS-SQL为例 String jdbcDriver="com.microsoft.jdb ...
- Docker常用命令(启动、镜像相关、容器相关、文件拷贝、目录挂载、查看容器IP地址、Docker备份与恢复)
0.设置Docker镜像加速器 详见文章:Docker设置ustc的镜像源(镜像加速器) 1.Docker的启动与停止 注: systemctl 命令是系统服务管理器指令. (1)启动docker(守 ...
- 分享Qt多工程多目录的编译案例,subdirs
写这篇文章的目的是为了让Qt像VC++那样,支持一个工程包含多个项目.即1个App+多个动态库.本案例以1个App+1个共享库为例: 工程源码我已上传Qt多工程多目录的编译案例_qt子项目编译顺序-C ...
最新文章
- Oracle undo表空间
- optee的Share Memory介绍
- python with方法
- Git根据commitId查看提交内容:根据commitId查看某次提交的内容
- 请求发送者与接收者解耦——命令模式
- 前端学习(2154):webpack横幅plugin的使用
- 数据结构基础(12) --双向循环链表的设计与实现
- java方法的重载 编程题,java面试编程题:重载方法
- 新产品Wyn Enterprise 详解,立即预约公开课
- C++的 RTTI 观念和用途
- BIM技术之Dynamo图元编程:柱、球面坐标系节点绘制螺旋线
- [从头读历史] 第263节 左传 [BC537至BC479]
- 【散文】 漫步在春天
- web前端开发的6个福利网站
- 在线 excel 产品技术调研
- “梧桐杯”中国移动大数据应用创新大赛 - 智慧金融赛道Baseline
- 用链接法实现散列表构造和查找
- 趣写算法之匈牙利算法
- 明日之后mumu模拟器找不到服务器,MuMu模拟器玩明日之后常见问题汇总
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛题解 H
热门文章
- 利用腾讯云服务器 FRP实现网络穿透 在本地搭建魔兽服务器
- php 负数装正,负数转正数_php怎么把负数转正数
- ppt怎么设置结束时播放音乐
- R语言空间数据分析学习笔记1——读取矢量数据并可视化
- 向日葵win10远程linux主机,win10系统使用向日葵远程桌面软件远程的修复办法
- SpringMvc 异常处理器
- 2019北航培训个人项目
- sqlserver management studio 2014 升级2016_Android Jetpack重磅升级!新的类库以及现有类库重大更新!
- 啥牌子的蓝牙耳机好用不贵?超帅的蓝牙耳机推荐
- EOF、EOT 简单介绍