Java的 list 转 树形结构

public class AreaVo {
    
    
    private String areaCode;
    private String areaName;
    private String upAreaCode;

    private List<AreaVo> childArea;



//添加子节点的方法
    public void addChild(AreaVo areaVo){
    
    
        if (childArea==null){
    
    
            childArea =new ArrayList<>();
        }
        childArea.add(areaVo);
    }


//    下方为构造函数以及getset方法

    public AreaVo() {
    
    
    }

    public AreaVo(String areaCode, String areaName, String upAreaCode) {
    
    
        this.areaCode=areaCode;
        this.areaName=areaName;
        this.upAreaCode=upAreaCode;
    }

    public String getAreaCode() {
    
    
        return areaCode;
    }

    public void setAreaCode(String areaCode) {
    
    
        this.areaCode = areaCode;
    }

    public String getAreaName() {
    
    
        return areaName;
    }

    public void setAreaName(String areaName) {
    
    
        this.areaName = areaName;
    }

    public String getUpAreaCode() {
    
    
        return upAreaCode;
    }

    public void setUpAreaCode(String upAreaCode) {
    
    
        this.upAreaCode = upAreaCode;
    }

    public List<AreaVo> getChildArea() {
    
    
        return childArea;
    }

    public void setChildArea(List<AreaVo> childArea) {
    
    
        this.childArea = childArea;
    }

    @Override
    public String toString() {
    
    
        return "AreaVo{" +
                "areaCode='" + areaCode + '\'' +
                ", areaName='" + areaName + '\'' +
                ", upAreaCode='" + upAreaCode + '\'' +
                ", childArea=" + childArea +
                '}';
    }
}
/*
* list  -->  tree
*
* list转tree:
*       首先list里面的数据要有上下级的关系
*       在创建对象的时候对象里面要包含对象本身,这样就是可以把子节点存储在父节点的对象里面
* */


import java.util.ArrayList;
import java.util.List;

public class ListToTree {
    
    
    public static void main(String[] args) {
    
    

        List<AreaVo> areaVos = new ArrayList<AreaVo>();
//        编造假数据
        areaVos.add(new AreaVo("10","安徽","01"));
        areaVos.add(new AreaVo("101","合肥","10"));
        areaVos.add(new AreaVo("102","安庆","10"));
        areaVos.add(new AreaVo("103","池州","10"));
        areaVos.add(new AreaVo("101001","肥东县","101"));
        areaVos.add(new AreaVo("101002","肥西县","101"));
        areaVos.add(new AreaVo("101003","蜀山区","101"));
        areaVos.add(new AreaVo("102001","宿松","102"));
        areaVos.add(new AreaVo("102002","枞阳","102"));
        areaVos.add(new AreaVo("103001","贵池","103"));
        areaVos.add(new AreaVo("103002","青阳","103"));
        areaVos.add(new AreaVo("103003","冬至","103"));
        areaVos.add(new AreaVo("103004","石台","103"));


//        建立一个list接收树形结构
        List<AreaVo> tree = new ArrayList<>();
//        遍历list找到list转树的根节点 ,然后存在接受树形结构的list里面
//        当地市编码为  10  的时候就表示根节点
        for (AreaVo node: areaVos){
    
    
            if ("10".equals(node.getAreaCode())){
    
    
                tree.add(node);
                addChild(areaVos,node);
            }
        }



        System.out.println(tree);



    }


    public static void addChild(List<AreaVo> list , AreaVo node){
    
    
//        给当前节点寻找其子节点,并添加到childArea(list<AreaVo>类型)属性中
            for (AreaVo zone:list){
    
    
                if (node.getAreaCode().equals(zone.getUpAreaCode())){
    
    
                    node.addChild(zone);
                }
            }

//            寻找子节点后,判断当前节点是否有子节点,如果没有子节点那就不继续往下找了,
            if (node.getChildArea()==null){
    
    
                return;
            }
//            如果有子节点,那就还得往下找
//            把当前节点的子节点传到当前的addChild方法中,继续找当前节点的子节点的子节点
        for (AreaVo zone:node.getChildArea()){
    
    
            addChild(list,zone);
        }

    }




}


[
AreaVo{areaCode='10',areaName='安徽',  upAreaCode='01', 
 childArea=[
 		AreaVo{areaCode='101', 
 		areaName='合肥', 
 		upAreaCode='10',
 		childArea=[
 		 		AreaVo{areaCode='101001', 
 		 				areaName='肥东县', 
 		 				upAreaCode='101', 
 		 				childArea=null}, 
 		 		AreaVo{areaCode='101002', 
 		 				areaName='肥西县', 
 		 				upAreaCode='101', 
 		 				childArea=null}, 
 		 		AreaVo{areaCode='101003', 
 		 				areaName='蜀山区',
 		 		 		upAreaCode='101', 
 		 		 		childArea=null}
 		 		 		]
 		 		}, 
		AreaVo{areaCode='102', 
		areaName='安庆', 
		upAreaCode='10', 
		childArea=[
				AreaVo{areaCode='102001',
		 			areaName='宿松', 
		 			upAreaCode='102', 
		 			childArea=null}, 
		 	AreaVo{areaCode='102002', 
		 			areaName='枞阳', 
		 			upAreaCode='102', 
		 			childArea=null}
		 			]
		 	}, 
		 AreaVo{areaCode='103', 
		 areaName='池州', 
		 upAreaCode='10', 
		 childArea=[
		 		AreaVo{areaCode='103001', 
		 			areaName='贵池', 
		 			upAreaCode='103', 
		 			childArea=null}, 
		 		AreaVo{areaCode='103002',
		 		 	areaName='青阳', 
		 		 	upAreaCode='103', 
		 		 	childArea=null}, 
		 		 AreaVo{areaCode='103003', 
		 		 	areaName='冬至', 
		 		 	upAreaCode='103', 
		 		 	childArea=null},
		 		  AreaVo{areaCode='103004', 
		 		  	areaName='石台', 
		 		  	upAreaCode='103', 
		 		  	childArea=null}
		 		  ]
		 	}
		]
	}
]

猜你喜欢

转载自blog.csdn.net/m0_46636892/article/details/123445537