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天河区
解决方案 »
- regex.PatternSyntaxException: Look-behind group does not have an obvious maximum
- 毕业设计 帮帮忙
- 怎么解析这段XML?
- 小弟含泪雪地跪求... 那位大侠给出答案啊
- 解释一下java的异常机制
- 求struts+fileupload 上传实例???---高分,不够再加
- 关于addWindowListener()和scrollRectToVisible 函数!
- 急!急!急!高分求助!JAVA运行时错误Exception in thread "main" java.lang.NoClassDefFoundError: Alpha
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
- 怎样注册和使用自定义的新文件类型?
- Thinking in Java有多好?
- 写java用什么IDE开发环境好?
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 天河区