我希望通过使用java中的递归函数来获得父-子关系数组。我试着用一些方法展示我想要的东西,但看上去有些不对劲。请给我一些建议和指导。
我的数据库里有三个表,部门,公司,部门。
部门
dept_cd company_cd
100 0017
101 0017
102 0017
103 0017
200 0017
201 0017
202 0017
300 0017
301 0017
302 0017
303 0017
304 0017
999 0017公司
company_cd
0017
0018部门
dept_cd (Parent) child_dept_cd
100 101
100 999
200 201
200 202
300 301
300 302
101 102
102 103
302 303
302 304我想(在控制台中)显示如下.
[100]
[100,101]
[100,101,102]
[100,101,102,103]
[100,999]
[200]
[200,201]
[200,202]
[300]
[300,301]
[300,302]
[300.302,303]
[300,302,304]在我的程序中,我写了如下。
ArrayList<ArrayList<String>> g_nodes = new ArrayList<ArrayList<String>>();
functionA() {
String p_DeptCd = functionB(g_ssp.g_gp.getParam("company_cd"), 0);
//e.g: company_cd = 0017, 0 means '0017 does not have parent'
}
functionB(String x_dept_cd, int x_flag){
PmsSql p_sql = new PmsSql(g_ssp);
if (x_flag == 0) {
p_sql.setField("dept.dept_cd, dept.dept_cd_nk, dept.dept_nm, dept.dept_disp_nm");
p_sql.setTable("dept INNER JOIN company ON dept.company_cd = company.company_cd");
p_sql.addWhere("dept.company_cd = ?");
p_sql.addWhere("dept.dept_cd NOT IN (SELECT child_dept_cd FROM depttree)");
p_sql.addWhereValue("company_cd", x_dept_cd);
p_sql.setOrder("dept.disp_order desc");
}
if (x_flag == 1) {
p_sql.setField("dept.dept_cd, dept.dept_disp_nm");
p_sql.setTable("dept INNER JOIN depttree ON dept.dept_cd = depttree.child_dept_cd");
p_sql.setWhere("dept.dept_cd_nk IS NOT NULL");
p_sql.addWhere("depttree.dept_cd = ?");
p_sql.addWhereValue("dept_cd", x_dept_cd);
p_sql.setOrder("dept.disp_order desc");
}
p_sql.execQuery();
while (p_sql.next()) {
String p_dept_cd = p_sql.getString("dept_cd");
ArrayList<String> p_childArr = new ArrayList<String>();
if(x_flag == 1){
p_childArr.add(x_dept_cd);
}
p_childArr.add(p_dept_cd);
g_nodes.add(p_childArr);
System.out.println("g_nodes = "+g_nodes);
functionB(p_dept_cd, 1);
}
return null;
}但它表现得像这样。
g_nodes = [[100], [100, 999], [100, 101], [101, 102], [102, 103], [200], [200, 201], [200, 202], [300], [300, 301], [300, 302], [302, 303], [302, 304]],我对我的长篇描述感到非常抱歉。,提前谢谢。
发布于 2013-11-11 03:34:12
首先,我认为你的问题过于复杂。
因此,您的问题可以简化为:
Dept
--------
DEPT_CD PARENT_DEPT_CD 最大的问题是:在您的原始代码中没有看到任何递归函数。你还不清楚告诉我们你的行为是什么。
如果您只是简单地获取所有dept,并将其所有父级显示在每个dept中,那么您可以简单地将其放到一个映射中(其中包含dept代码和父dept代码),并使用dept代码作为键。然后,对于映射中的每个部分,递归地显示父级的dept代码,然后显示它自己的代码。
就像这样:
//....
for (Dept dept : deptMap.values()) {
displayDept(dept, deptMap);
}
//.....
void displayDept(Dept dept, Map<String, Dept> deptMap) {
if (dept has parent) {
Dept parentDept = deptMap.get(dept.parent);
displayDept(parentDept, deptMap);
}
display dept.code
}(只需给你一个想法,请自己写正确的代码)
如果您使用的是甲骨文(在我看来类似于SQL和约定),您也可以考虑使用分层查询,这样可以大大减少构建节点层次结构的工作量:01/server.102/b14200/queries003.htm。
https://stackoverflow.com/questions/19857753
复制相似问题