`
newqinhao
  • 浏览: 141339 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

传智播客-----递归实现与实现转换数据的方法

阅读更多
今天汤阳光老师给我们讲递归实现与实现转换数据方法的不同效果!

用递归实现不同效果:
/**
  * 要求打印如下效果:
  *
  * <pre>
  * 传智播客
  * 市场部
  * 市场1部
  * 市场2部
  * 开发部
  * 开发1部
  * 开发2部
  * </pre>
  */
package cn.itcast.oa.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.Test;

import cn.itcast.oa.entities.Department;

public class WebTreeViewUtilsTest {
效果1:
/**
  * 要求打印如下效果:
  *
  * <pre>
  * 传智播客
  * 市场部
  * 市场1部
  * 市场2部
  * 开发部
  * 开发1部
  * 开发2部
  * </pre>
  */
效果2:
/**
  * 要求打印如下效果:
  *
  * <pre>
  * ┠传智播客
  *  ┠市场部
  *   ┠市场1部
  *   ┠市场2部
  *  ┠开发部
  *   ┠开发1部
  *   ┠开发2部
  *
  * </pre>
  */
@Test
public void printAllDepts_1() {
  List<Department> depts = findTopLevelDepartments();
  for (Department dept : depts) {
   printDeptInfo_1(dept);
  }
}

// 打印出部门的信息
public void printDeptInfo_1(Department dept) {
  // 1,名称
  System.out.println(dept.getName());
  // 2,子部门
  for (Department d : dept.getChildren()) {
   printDeptInfo_1(d);
  }
}

/**
  * 要求打印如下效果:
  *
  * <pre>
  * ┠传智播客
  *  ┠市场部
  *   ┠市场1部
  *   ┠市场2部
  *  ┠开发部
  *   ┠开发1部
  *   ┠开发2部
  *
  * </pre>
  */
@Test
public void printAllDepts_2() {
  List<Department> depts = findTopLevelDepartments();
  for (Department dept : depts) {
   printDeptInfo_2(dept, "");
  }
}

public void printDeptInfo_2(Department dept, String prefix) {
  // 1,名称
  System.out.println(prefix + "┠" + dept.getName());
  // 2,子部门
  for (Department d : dept.getChildren()) {
   printDeptInfo_2(d, prefix + " ");
  }
}

/**
  * 要求打印如下效果:
  *
  * <pre>
  * ┠传智播客
  *  ┠市场部
  *   ┠市场1部
  *   ┠市场2部
  *  ┠开发部
  *   ┠开发1部
  *   ┠开发2部
  *
  * </pre>
  */
@Test
public void printAllDepts_3() {
  List<Department> topLevelDepts = findTopLevelDepartments();
  List<Department> allDepts = getAllDepts_3(topLevelDepts, "");
  for (Department dept : allDepts) {
   System.out.println(dept.getName());
  }
}

// 返回当前所有部门及其子孙部门的集合
public List<Department> getAllDepts_3(Collection<Department> depts, String prefix) {
  List<Department> list = new ArrayList<Department>();
  for (Department dept : depts) {
   dept.setName(prefix + "┠" + dept.getName());
   list.add(dept);

   List<Department> subDepts = getAllDepts_3(dept.getChildren(), prefix + " ");
   list.addAll(subDepts);
  }
  return list;
}

// ---
@Test
public void printAllDepts_3_2() {
  List<Department> topLevelDepts = findTopLevelDepartments();
  List<Department> allDepts = new ArrayList<Department>();

  preAllDepts_3_2(topLevelDepts, "", allDepts);
  for (Department dept : allDepts) {
   System.out.println(dept.getName());
  }
}

public void preAllDepts_3_2(Collection<Department> depts, String prefix, List<Department> allDepts) {
  for (Department dept : depts) {
   dept.setName(prefix + "┠" + dept.getName());
   allDepts.add(dept);

   preAllDepts_3_2(dept.getChildren(), prefix + " ", allDepts);
  }
}

// ---

/**
  * @return 所有最顶层的部门的列表
  */
public static List<Department> findTopLevelDepartments() {
  Department dept11 = new Department();
  dept11.setId(11);
  dept11.setName("市场1部");
  Department dept12 = new Department();
  dept12.setId(12);
  dept12.setName("市场2部");

  Department dept1 = new Department();
  dept1.setId(1);
  dept1.setName("市场部");
  dept1.getChildren().add(dept11);
  dept1.getChildren().add(dept12);

  Department dept21 = new Department();
  dept21.setId(21);
  dept21.setName("开发1部");
  Department dept22 = new Department();
  dept22.setId(22);
  dept22.setName("开发2部");

  Department dept2 = new Department();
  dept2.setId(2);
  dept2.setName("开发部");
  dept2.getChildren().add(dept21);
  dept2.getChildren().add(dept22);

  Department itcast = new Department();
  itcast.setId(1000);
  itcast.setName("传智播客");
  itcast.getChildren().add(dept1);
  itcast.getChildren().add(dept2);

  List<Department> depts = new ArrayList<Department>();
  depts.add(itcast);
  return depts;
}
}

实现一个窗口选择后数据跑到另一个页面并自动关闭的例题:
main.html
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <!--
  <script type="text/javascript" src="script.js"></script>
  <link rel="stylesheet" type="text/css" href="style.css">
  -->
  <script type="text/javascript">
   function openSelDept(){
     var url="selDept.html";
   window.showModalDialog(url,window,"dialogwidth:350px;dialogHeight:350px");
  
 
  // var win=  window.open(url,"selDept","menubar=no,toolbar=no");
   //win.focus();
   }
  </script>
</head>
<body>
 
  <form>
   所属部门<input type="text" name="deptName" readonly="true"/>
  
   <input type="button" value="选择部门" onclick="openSelDept()"/>
  </form>
  <script type="text/javascript">
  </script>
</body>
</html>


<html>
<head>
<base target="_self"/>
  <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
  <!--
  <script type="text/javascript" src="script.js"></script>
  <link rel="stylesheet" type="text/css" href="style.css">
  -->
  <script type="text/javascript">
     function selMe(deptName){
     var mainWindow =window.dialogArguments;
    
     mainWindow.document.forms[0].deptName.value=deptName; 
    
     // window.close();
     }
  </script>
</head>
<body>
  <a href="javascript:selMe('市场部')"> 市场部</a>
  
          <a href="javascript:selMe('开发部门')"> 开发部门</a>
</body>
</html>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics