/**
* 说明:不能使用多层循环的方式,因为需要能支持任意层。
*/
public class TreeViewPractice {
/**
* 练习一:打印所有顶层部门及其子孙部门的信息(名称) 提示:假设有一个 打印部门树 的信息 的方法
*
* 要求打印如下效果:
*
* <pre>
* 市场部
* 市场1部
* 市场2部
* 21
* 22
* 开发部
* 开发1部
* 开发2部
* </pre>
*/
@Test
public void printAllDepts_1() {
List<Department> topLevelDepartments = findTopLevelDepartmentList();
for (Department department : topLevelDepartments) {
printChildrenDepts_1(department);
}
}
private void printChildrenDepts_1(Department department) {
System.out.println(department.getName());
if (department.getChildren() != null) {
for (Department child : department.getChildren()) {
printChildrenDepts_1(child);
}
}
}
/**
* 练习二:打印所有顶层部门及其子孙部门的信息(名称),用不同的缩进表示层次(使用全角空格)。<br>
* 子部门的名称前比上级部门多一个空格,最顶层部门的名字前没有空格。 提示:假设有一个打印部门集合中所有部门信息的方法
*
* 要求打印如下效果:
*
* <pre>
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠21
* ┠22
* ┠开发部
* ┠开发1部
* ┠开发2部
* </pre>
*/
@Test
public void printAllDepts_2() {
List<Department> topLevelDepartments = findTopLevelDepartmentList();
for (Department department : topLevelDepartments) {
printChildrenDepts_2(department, 0);
}
}
private void printChildrenDepts_2(Department department, int level) {
String sapce = "";
for (int i = 0; i < level; i++) {
sapce += " ";
}
System.out.println(sapce + "┠" + department.getName());
if (department.getChildren() != null) {
level++;
for (Department child : department.getChildren()) {
printChildrenDepts_2(child, level);
}
}
}
/**
* 结构如下:
*
* <pre>
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠21
* ┠22
* ┠开发部
* ┠开发1部
* ┠开发2部
* </pre>
*
* @return 所有最顶层的部门的列表
*/
public static List<Department> findTopLevelDepartmentList() {
Department dept_1_1 = new Department();
dept_1_1.setId(new Long(11));
dept_1_1.setName("市场1部");
Department dept_1_2 = new Department();
dept_1_2.setId(new Long(12));
dept_1_2.setName("市场2部");
Department dept_1_2_1 = new Department();
dept_1_2_1.setId(new Long(121));
dept_1_2_1.setName("21");
Department dept_1_2_2 = new Department();
dept_1_2_2.setId(new Long(122));
dept_1_2_2.setName("22");
dept_1_2_1.setParent(dept_1_2);
dept_1_2_2.setParent(dept_1_2);
Set<Department> children_0 = new LinkedHashSet<Department>();
children_0.add(dept_1_2_1);
children_0.add(dept_1_2_2);
dept_1_2.setChildren(children_0);
// ================================
Department dept_1 = new Department();
dept_1.setId(new Long(1));
dept_1.setName("市场部");
dept_1_1.setParent(dept_1);
dept_1_2.setParent(dept_1);
Set<Department> children_1 = new LinkedHashSet<Department>();
children_1.add(dept_1_1);
children_1.add(dept_1_2);
dept_1.setChildren(children_1);
// ---
Department dept_2_1 = new Department();
dept_2_1.setId(new Long(21));
dept_2_1.setName("开发1部");
Department dept_2_2 = new Department();
dept_2_2.setId((new Long(22)));
dept_2_2.setName("开发2部");
Department dept_2 = new Department();
dept_2.setId(new Long(2));
dept_2.setName("开发部");
dept_2_1.setParent(dept_2);
dept_2_2.setParent(dept_2);
Set<Department> children_2 = new LinkedHashSet<Department>();
children_2.add(dept_2_1);
children_2.add(dept_2_2);
dept_2.setChildren(children_2);
// ---
List<Department> depts = new ArrayList<Department>();
depts.add(dept_1);
depts.add(dept_2);
return depts;
}
* 说明:不能使用多层循环的方式,因为需要能支持任意层。
*/
public class TreeViewPractice {
/**
* 练习一:打印所有顶层部门及其子孙部门的信息(名称) 提示:假设有一个 打印部门树 的信息 的方法
*
* 要求打印如下效果:
*
* <pre>
* 市场部
* 市场1部
* 市场2部
* 21
* 22
* 开发部
* 开发1部
* 开发2部
* </pre>
*/
@Test
public void printAllDepts_1() {
List<Department> topLevelDepartments = findTopLevelDepartmentList();
for (Department department : topLevelDepartments) {
printChildrenDepts_1(department);
}
}
private void printChildrenDepts_1(Department department) {
System.out.println(department.getName());
if (department.getChildren() != null) {
for (Department child : department.getChildren()) {
printChildrenDepts_1(child);
}
}
}
/**
* 练习二:打印所有顶层部门及其子孙部门的信息(名称),用不同的缩进表示层次(使用全角空格)。<br>
* 子部门的名称前比上级部门多一个空格,最顶层部门的名字前没有空格。 提示:假设有一个打印部门集合中所有部门信息的方法
*
* 要求打印如下效果:
*
* <pre>
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠21
* ┠22
* ┠开发部
* ┠开发1部
* ┠开发2部
* </pre>
*/
@Test
public void printAllDepts_2() {
List<Department> topLevelDepartments = findTopLevelDepartmentList();
for (Department department : topLevelDepartments) {
printChildrenDepts_2(department, 0);
}
}
private void printChildrenDepts_2(Department department, int level) {
String sapce = "";
for (int i = 0; i < level; i++) {
sapce += " ";
}
System.out.println(sapce + "┠" + department.getName());
if (department.getChildren() != null) {
level++;
for (Department child : department.getChildren()) {
printChildrenDepts_2(child, level);
}
}
}
/**
* 结构如下:
*
* <pre>
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠21
* ┠22
* ┠开发部
* ┠开发1部
* ┠开发2部
* </pre>
*
* @return 所有最顶层的部门的列表
*/
public static List<Department> findTopLevelDepartmentList() {
Department dept_1_1 = new Department();
dept_1_1.setId(new Long(11));
dept_1_1.setName("市场1部");
Department dept_1_2 = new Department();
dept_1_2.setId(new Long(12));
dept_1_2.setName("市场2部");
Department dept_1_2_1 = new Department();
dept_1_2_1.setId(new Long(121));
dept_1_2_1.setName("21");
Department dept_1_2_2 = new Department();
dept_1_2_2.setId(new Long(122));
dept_1_2_2.setName("22");
dept_1_2_1.setParent(dept_1_2);
dept_1_2_2.setParent(dept_1_2);
Set<Department> children_0 = new LinkedHashSet<Department>();
children_0.add(dept_1_2_1);
children_0.add(dept_1_2_2);
dept_1_2.setChildren(children_0);
// ================================
Department dept_1 = new Department();
dept_1.setId(new Long(1));
dept_1.setName("市场部");
dept_1_1.setParent(dept_1);
dept_1_2.setParent(dept_1);
Set<Department> children_1 = new LinkedHashSet<Department>();
children_1.add(dept_1_1);
children_1.add(dept_1_2);
dept_1.setChildren(children_1);
// ---
Department dept_2_1 = new Department();
dept_2_1.setId(new Long(21));
dept_2_1.setName("开发1部");
Department dept_2_2 = new Department();
dept_2_2.setId((new Long(22)));
dept_2_2.setName("开发2部");
Department dept_2 = new Department();
dept_2.setId(new Long(2));
dept_2.setName("开发部");
dept_2_1.setParent(dept_2);
dept_2_2.setParent(dept_2);
Set<Department> children_2 = new LinkedHashSet<Department>();
children_2.add(dept_2_1);
children_2.add(dept_2_2);
dept_2.setChildren(children_2);
// ---
List<Department> depts = new ArrayList<Department>();
depts.add(dept_1);
depts.add(dept_2);
return depts;
}