这样的应用场景例如组织架构树,由于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) ); } }