哈哈哈,有点惭愧,工作三年才体会到递归的真髓,也是以前经验不到家,想不明白,哈哈哈哈。
今天的例子以三级列表为主~
主要思路:要找出所有父亲里的每个父亲下的所有儿子,并将儿子赋值给自己父亲的儿子名下 , 但儿子也会有自己的儿子,也要将找出来的儿子赋值儿子的儿子名下~
做法:先到一个有全部人的圈子里将所有身份为父亲找出来,再把找出来的身份为父亲的人与全部的圈子里的身份为儿子比较( 比较方式:根据父亲的身份证与儿子的父亲身份证比对),满足条件再将儿子赋值到父亲的儿子名下~~~是不是很简单~~~~
看看代码,更加一目了然~~
public List<EmrModleVo> queryEmrModleList() {
// 1 获取所有数据
List<EmrModleVo> allList = this.baseMapper.queryEmrModleList();
// 2 获取父亲列表
List<EmrModleVo> parentList = getParentList(allList);
// 3 获取父亲下的所有儿子的父亲列表
List<EmrModleVo> childrenList = getChildrenList(allList, parentList);
return childrenList;
}
// 获取父亲列表
private List<EmrModleVo> getParentList(List<EmrModleVo> allList){
List<EmrModleVo> parentList = new ArrayList<EmrModleVo>();
allList.forEach(emrModleVo -> {
if(emrModleVo.getParentId() == 0){
parentList.add(emrModleVo);
}
});
return parentList;
}
// 获取父亲下的所有儿子的父亲列表
private List<EmrModleVo> getChildrenList(List<EmrModleVo> allList,List<EmrModleVo> parentList){
parentList.forEach(oneEmrModleVo -> {
List<EmrModleVo> childrenList = new ArrayList<EmrModleVo>();
allList.forEach(allEmrModleVo -> {
if(oneEmrModleVo.getId().equals(allEmrModleVo.getParentId())){
childrenList.add(allEmrModleVo);
}
});
oneEmrModleVo.setChildren(getChildrenList(allList,childrenList));
});
return parentList;
}
数据库结构如下:
求出来的集合如下:
{
"code": 0,
"msg": "操作成功",
"data": [
{
"id": "1",
"parentId": "0",
"modleFlag": "1",
"modleName": "查询条件模板列表",
"effeTime": "2121-06-06T16:00:00.000+00:00",
"selectFlag": 0,
"effective": 1,
"modleSort": 0,
"children": [
{
"id": "3",
"parentId": "1",
"modleFlag": "1",
"modleName": "查询默认模板",
"effeTime": "2121-06-06T16:00:00.000+00:00",
"selectFlag": 1,
"effective": 1,
"modleSort": 1,
"children": [
{
"id": "5",
"parentId": "3",
"modleFlag": "1",
"modleName": "查询",
"effeTime": "2121-06-06T16:00:00.000+00:00",
"selectFlag": 0,
"effective": 1,
"modleSort": 2,
"children": []
}
]
}
]
},
{
"id": "2",
"parentId": "0",
"modleFlag": "2",
"modleName": "表头显示模板列表",
"effeTime": "2121-06-06T16:00:00.000+00:00",
"selectFlag": 0,
"effective": 1,
"modleSort": 0,
"children": [
{
"id": "4",
"parentId": "2",
"modleFlag": "2",
"modleName": "表头默认模板",
"effeTime": "2121-06-06T16:00:00.000+00:00",
"selectFlag": 1,
"effective": 1,
"modleSort": 1,
"children": [
{
"id": "6",
"parentId": "4",
"modleFlag": "2",
"modleName": "表头",
"effeTime": "2121-06-06T16:00:00.000+00:00",
"selectFlag": 0,
"effective": 1,
"modleSort": 2,
"children": []
}
]
}
]
}
]
}