import java.util.ArrayList;
import java.util.List;public class Test {    public static void main(String[] args) {
        List<Area> areas = new ArrayList<Area>();
        areas.add(new Area("广东省", 888, 0)); 
        areas.add(new Area("深圳市", 853, 888));
        areas.add(new Area("南山区", 566, 853));
        areas.add(new Area("罗湖区", 588, 853));
        areas.add(new Area("广州市", 876, 888));
        areas.add(new Area("越秀区", 788, 876));
        areas.add(new Area("天河区", 775, 876));
        get(areas, 0, 0);
    }
    
    public static void get(List<Area> areas, int pid, int level) {
        List<Area> a = findAllChilds(areas, pid);
        if(a.size() == 0) {
            return;
        }
        for(int i = 0, k = a.size(); i < k; i++) {
            System.out.print(indent(level));
            System.out.println(a.get(i).getName());
            get(areas, a.get(i).getId(), level + 1);
        }
    }
    
    private static List<Area> findAllChilds(List<Area> areas, int pid) {
        List<Area> list = new ArrayList<Area>();
        for(int i = 0, k = areas.size(); i < k; i++) {
            Area area = areas.get(i);            
            if(area.getPid() == pid) {                
                list.add(area);
            }
        }
        return list;
    }
    
    private static String indent(int level) {
        if(level < 1) {
            return "";
        }
        char[] chs = new char[level];
        for(int i = 0; i < level; i++) {
            chs[i] = '-';
        }
        return new String(chs);
    }
}class Area {
    private String name;
    private int id;
    private int pid;    
    
    public Area(String name, int id, int pid) {
        this.name = name;
        this.id = id;
        this.pid = pid;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
}
输出结果:广东省
-深圳市
--南山区
--罗湖区
-广州市
--越秀区
--天河区
需要结果0广东省
1深圳市
1.1南山区
1.2罗湖区
2广州市
2.1越秀区
2.2天河区

解决方案 »

  1.   

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;public class Kook {    public static void main(String[] args) {
            List<Area> areas = new ArrayList<Area>();
            areas.add(new Area("广东省", 888, 0)); 
            areas.add(new Area("深圳市", 853, 888));        
            areas.add(new Area("南山区", 566, 853));
            areas.add(new Area("罗湖区", 588, 853));
            areas.add(new Area("广州市", 876, 888));
            areas.add(new Area("越秀区", 788, 876));
            areas.add(new Area("天河区", 775, 876));
            
            Map<Integer, List<Area>> map = conver(areas);
            get(map, 0, 0, "");
        }
        
        public static void get(Map<Integer, List<Area>> map, int pid, int level, String prefix) {
            List<Area> a = map.get(pid);
            if(a == null || a.size() == 0) {
                return;
            }
            for(int i = 0, k = a.size(); i < k; i++) {
                String str = level < 1 ? (i + 1 + "") : (prefix + "." + (i + 1));
                System.out.println(str + "  " + a.get(i).getName());
                get(map, a.get(i).getId(), level + 1, str);
            }
        }
        
        public static Map<Integer, List<Area>> conver(List<Area> areas) {
            Map<Integer, List<Area>> map = new HashMap<Integer, List<Area>>();
            for(int i = 0, k = areas.size(); i < k; i++) {
                Area area = areas.get(i);
                int pid = area.getPid();
                List<Area> ars = map.get(pid);            
                if(ars == null) {
                    ars = new ArrayList<Area>();
                    map.put(pid, ars);
                }
                ars.add(area);
            }
            return map;
        }
    }class Area {
        private String name;
        private int id;
        private int pid;    
        
        public Area(String name, int id, int pid) {
            this.name = name;
            this.id = id;
            this.pid = pid;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getPid() {
            return pid;
        }
        public void setPid(int pid) {
            this.pid = pid;
        }
    }Area 类不变输出:1  广东省
    1.1  深圳市
    1.1.1  南山区
    1.1.2  罗湖区
    1.2  广州市
    1.2.1  越秀区
    1.2.2  天河区