前台向后台请求数据时可能会希望能得到一个树结构的数据结构,方便我们前台获取和使用,也能使得数据结构清晰。这时候需要,后台将数据转化为树形结构。整体思路为:
1. 定义树形结构的实体类
2. 新建工具类,利用递归算法,将数据循环遍历并且返回
3. 在controller层,将工具类开辟空间,调用其中的递归算法
代码如下:
1,实体类
public class Tree {
private String id;//主键
private String parent_code;//父级编码
private String tree_name;//树结构的名字
private String isparent;//是否是父极
private String tree_sort;//排序
private String tree_img;//树结构的图片
//get和set方法省略,各位自己生成
}
2,定义工具类
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MenuTreeUtil {
public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>();
public List<Tree> menuCommon;
public List<Object> list = new ArrayList<Object>();
public List<Object> menuList(List<Tree> menu){ //controller层调用的方法 ,并将数据以list的形式返回
this.menuCommon = menu;
for (Tree x : menu) {
Map<String,Object> mapArr = new LinkedHashMap<String, Object>();
if(x.getIsparent().equals("true")&&x.getParent_code().equals("0")){ //判断是否为父极
mapArr.put("id", x.getId());
mapArr.put("tree_name", x.getTree_name());
mapArr.put("parent_code", x.getParent_code());
mapArr.put("hasChildren", x.getIsparent());
mapArr.put("tree_img", x.getTree_img());
mapArr.put("tree_sort", x.getTree_sort());
mapArr.put("child", menuChild(x.getId())); //去子集查找遍历
list.add(mapArr);
}
}
return list;
}
public List<?> menuChild(String id){ //子集查找遍历
List<Object> lists = new ArrayList<Object>();
for(Tree a:menuCommon){
Map<String,Object> childArray = new LinkedHashMap<String, Object>();
if(a.getParent_code().equals(id) ){
childArray.put("id", a.getId());
childArray.put("tree_name", a.getTree_name());
childArray.put("parent_code", a.getParent_code());
childArray.put("tree_img", a.getTree_img());
childArray.put("tree_sort", a.getTree_sort());
childArray.put("hasChildren", a.getIsparent());
childArray.put("child", menuChild(a.getId()));
lists.add(childArray);
}
}
return lists;
}
}
3, controller层调用(代码有删减,主要思路1,循环遍历从数据库从查询的所有数据。2,为利用工具类方法的set和get方法,将数据放到list中3,将新生成的list数据,提交给工具类)
@PostMapping(value = "/queryTree")
public Object findPage() {
Map<String, Object> returnMap = new HashMap<>();
List<PageData> lists = regionTreeService.findRegionTreePage(pd);//所有数据未转化成树结构
MenuTreeUtil menuTree = new MenuTreeUtil();//定义工具类
List<Tree> lt = new ArrayList<Tree>();//定义实体类
for (int i = 0; i < lists.size(); i++) {//遍历获取数据
Tree t = new Tree(); //转化成对象
t.setId((String) lists.get(i).get("id"));//将数据赋给实体类
t.setTree_name((String) lists.get(i).get("tree_name"));
t.setParent_code((String) lists.get(i).get("parent_code"));
t.setIsparent((String) lists.get(i).get("isparent"));
t.setTree_img((String) lists.get(i).get("tree_img"));
t.setTree_sort((String) lists.get(i).get("tree_sort"));
t.setIsparent((String) lists.get(i).get("isparent"));
lt.add(t);
}
System.out.println(lt);
List<Object> menuList = menuTree.menuList(lt);//所有数据转化成树结构
returnMap.put("list", menuList);
return returnMap;
}
总体效果:
{
"total": 11,
"list": [
{
"id": "954564617615548416",
"tree_name": "中国",
"parent_code": "0",
"hasChildren": "true",
"tree_img": "/img.aaa.jpg",
"tree_sort": "0",
"child": [
{
"id": "954570573374636032",
"tree_name": "北京",
"parent_code": "954564617615548416",
"tree_img": "/img.aaa.jpg",
"tree_sort": "0",
"hasChildren": "true",
"child": [
{
"id": "954827144123908096",
"tree_name": "昌平",
"parent_code": "954570573374636032",
"tree_img": "/img.aaa.jpg",
"tree_sort": "0",
"hasChildren": "false",
"child": []
},
{
"id": "954827187873013760",
"tree_name": "丰台",
"parent_code": "954570573374636032",
"tree_img": "/img.aaa.jpg",
"tree_sort": "10",
"hasChildren": "false",
"child": []
}
]
},
{
"id": "954826845157756928",
"tree_name": "太原",
"parent_code": "954564617615548416",
"tree_img": "/img.aaa.jpg",
"tree_sort": "0",
"hasChildren": "true",
"child": [
{
"id": "954925121096708096",
"tree_name": "太原火车",
"parent_code": "954826845157756928",
"tree_img": "/img.aaa.jpg",
"tree_sort": "10",
"hasChildren": "false",
"child": []
},
{
"id": "954925161051533312",
"tree_name": "太原景点",
"parent_code": "954826845157756928",
"tree_img": "/img.aaa.jpg",
"tree_sort": "10",
"hasChildren": "false",
"child": []
}
]
},
{
"id": "954826941573419008",
"tree_name": "大同",
"parent_code": "954564617615548416",
"tree_img": "/img.aaa.jpg",
"tree_sort": "0",
"hasChildren": "true",
"child": [
{
"id": "954925603377143808",
"tree_name": "大同花园",
"parent_code": "954826941573419008",
"tree_img": "/img.aaa.jpg",
"tree_sort": "10",
"hasChildren": "false",
"child": []
},
{
"id": "954925632135364608",
"tree_name": "大同火车站",
"parent_code": "954826941573419008",
"tree_img": "/img.aaa.jpg",
"tree_sort": "10",
"hasChildren": "false",
"child": []
}
]
}
]
}
]
}