列表转树形结构

这样的应用场景例如组织架构树,由于Mysql不象Oracle有支持树形查询的sql, 所以Mysql只能返回普通的列表数据,需要我们通过代码对列表进行加工,返回树形结构的数据,用途一般用于前端显示,以下是java代码示例,目前代码还不通用,只是个demo

public class TestLandType {



    public static  List<LandType> init() {
        //准备数据
        LandType landType1 = new LandType(1,"杭州" , 0 );
        LandType landType2 = new LandType(2,"宁波" , 0 );
        LandType landType3 = new LandType(3,"温州" , 0 );

        LandType landType4 = new LandType(11,"上城区" , 1);
        LandType landType5 = new LandType(12,"余杭区" , 1);

        LandType landType6 = new LandType(21,"宁波1区" , 2);
        LandType landType7 = new LandType(22,"宁波1区" , 2);

        List<LandType> list = Arrays.asList(landType1, landType2,landType3,landType4,
                landType5,landType6,landType7);
        return list ;
    }

    private  static List<Integer> idList = new ArrayList<>(); //用来保存已处理过的id

    public   static List<LandType> types = init();

    public static Map<String,Object> sort(LandType type){
        Map<String,Object> tree = new LinkedHashMap<>();
        Integer  id = type.getId();
       // if(! idList.contains(id)){
           // idList.add(id);
            tree.put("node",type); //保存当前节点

            List<LandType> sub = new ArrayList<>();
            for (LandType data: types) {
                if( data.getPid() == id){
                    sub.add(data);
                }
            }
            List<Map<String,Object>> sub1 = new ArrayList<>();

            for (LandType subType : sub) {
                //****** 再根据取出来的集合 ,递归此方法 *******
                Map<String,Object> subtree1 = sort(subType);
                sub1.add(subtree1);
            }
            if(sub1 != null && sub1.size()>0)
                tree.put("child", sub1);
        //}
        return tree ;
    }





    public static void main(String[] args) {

        LandType type = new LandType(0,"地块类别",null);



        Map<String,Object> tree = sort(type );

        System.out.println(JSON.toJSONString(tree) );

    }
}
原文地址:https://www.cnblogs.com/hzhuxin/p/14765621.html