zoukankan      html  css  js  c++  java
  • Java 递归调用 recursive 给一个参数 返回一大堆

    需求: 需要组装成对象多层嵌套式的 json字符串; 

    想到使用 递归来完成这个多层嵌套: 

    憋了四个小时,终于写出来了;

    先看效果: 

    数据库中的数据:

    拼装后的效果:

    [
        EmpVO{
            ename='孙老三1',
            empno=10,
            mgr=0,
            subordinates=[
                EmpVO{
                    ename='KING',
                    empno=7839,
                    mgr=10,
                    subordinates=[
                        EmpVO{
                            ename='JONES',
                            empno=7566,
                            mgr=7839,
                            subordinates=[
                                EmpVO{
                                    ename='SCOTT',
                                    empno=7788,
                                    mgr=7566,
                                    subordinates=[
                                        EmpVO{
                                            ename='ADAMS',
                                            empno=7876,
                                            mgr=7788,
                                            subordinates=null
                                        }
                                    ]
                                },
                                EmpVO{
                                    ename='FORD',
                                    empno=7902,
                                    mgr=7566,
                                    subordinates=[
                                        EmpVO{
                                            ename='SMITH',
                                            empno=7369,
                                            mgr=7902,
                                            subordinates=null
                                        }
                                    ]
                                }
                            ]
                        },
                        EmpVO{
                            ename='BLAKE',
                            empno=7698,
                            mgr=7839,
                            subordinates=[
                                EmpVO{
                                    ename='ALLEN',
                                    empno=7499,
                                    mgr=7698,
                                    subordinates=null
                                },
                                EmpVO{
                                    ename='WARD',
                                    empno=7521,
                                    mgr=7698,
                                    subordinates=null
                                },
                                EmpVO{
                                    ename='MARTIN',
                                    empno=7654,
                                    mgr=7698,
                                    subordinates=null
                                },
                                EmpVO{
                                    ename='TURNER',
                                    empno=7844,
                                    mgr=7698,
                                    subordinates=null
                                },
                                EmpVO{
                                    ename='JAMES',
                                    empno=7900,
                                    mgr=7698,
                                    subordinates=null
                                }
                            ]
                        },
                        EmpVO{
                            ename='CLARK',
                            empno=7782,
                            mgr=7839,
                            subordinates=[
                                EmpVO{
                                    ename='MILLER',
                                    empno=7934,
                                    mgr=7782,
                                    subordinates=null
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        EmpVO{
            ename='陈老五1',
            empno=20,
            mgr=0,
            subordinates=[
                EmpVO{
                    ename='1',
                    empno=200,
                    mgr=20,
                    subordinates=[
                        EmpVO{
                            ename='钱老二',
                            empno=2000,
                            mgr=200,
                            subordinates=null
                        }
                    ]
                }
            ]
        },
        EmpVO{
            ename='zas1',
            empno=30,
            mgr=0,
            subordinates=[
                EmpVO{
                    ename='陈生',
                    empno=300,
                    mgr=30,
                    subordinates=[
                        EmpVO{
                            ename='李四',
                            empno=3000,
                            mgr=300,
                            subordinates=null
                        }
                    ]
                }
            ]
        }
    ]

    上代码: 

    public class RecursiveDemo {
    
        EmpService service = new EmpService();
    
        public static void main(String[] args) throws SQLException, ClassNotFoundException {
    
            EmpVO emp = new EmpVO();
            RecursiveDemo rd = new RecursiveDemo();
            List<EmpVO> l = rd.recursive21(0);
            System.out.println(l);
        }
    
        List<EmpVO> recursive21(int mgr) throws SQLException, ClassNotFoundException {
            List<EmpVO> l = null;
            List<EmpVO> subordinates = service.getEmpsByMgr(mgr);
            if (subordinates != null && subordinates.size() > 0) {
                l = new ArrayList<EmpVO>();
                List<EmpVO> list = null;
                for (EmpVO empvo : subordinates) {
                    list = recursive21(empvo.getEmpno());
                    empvo.setSubordinates(list);
                    l.add(empvo);
                }
            }
            return l;
        }
    
    }

     很有意思的是: 参数和返回结果:

    我先后尝试了  : 参数是 emp  返回结果是 emp  ; 参数是 list 返回结果是 list  ;   参数是emp 返回结果是list ; 终于后来又尝试 参数 int  返回结果list ; 

    从我对参数和返回结果的预设 可以看出: 

    开始时 我的理解时:  最终的目标是返回一个对象 ;  所以 返回结果类型是 对象; 

    又参考 dom4j 遍历 xml 文档 ; 觉得 返回应该是一个list ; 

    对传入参数的理解 : 刚开始也是不对的 ; 认为可能是 list 或者 对象 ;

    后来 又 参考 dom4j 遍历 xml 文档 : 觉得 参数可能不是一个直接的, 而是一个间接的 ;

    综上所述: 

     递归 最常用的形式可能就是 :  给一个 返回一大堆 ; 

    如: Java 递归遍历文件夹; 

    如: dom4j递归遍历xml文件;

    再问一个问题:  这种递归调用 可以 使用 尾递归 优化么?  

    不可以 : 遍历的缘故 .

  • 相关阅读:
    hdoj--2098--分拆素数和(水题)
    hdoj--5563--Clarke and five-pointed star(简单几何)
    zzulioj--1813--good string(模拟)
    docker(3)docker下的centos7下安装jdk
    docker(2)安装centos7镜像与容器管理
    docker安装
    大数据简介
    esper(1)-窗口概述
    idea(2)快捷键
    idea(1)-idea初装
  • 原文地址:https://www.cnblogs.com/sanmubird/p/7719759.html
Copyright © 2011-2022 走看看