后台数据转树形结构返回前台

前台向后台请求数据时可能会希望能得到一个树结构的数据结构,方便我们前台获取和使用,也能使得数据结构清晰。这时候需要,后台将数据转化为树形结构。整体思路为:

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": []
                        }
                    ]
                }
            ]
        }
    ]
}
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值