JAvaは、親ノードの下にあるすべてのサブノードを再帰的に取得します.


1.menuエンティティークラス
package recursion;

/**
 * Created by tl on 2016/4/10.
 */
public class Menu {
    private String id;
    private String name;
    private String pid;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }
}

2.テストクラス
package recursion;

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

/**
 * Created by tl on 2016/4/10.
 */
public class MenuRecursion {
    //   
    static  List childMenu=new ArrayList();

    /**
     *                
     * @param menuList
     * @param pid
     * @return
     */
    public static List treeMenuList( List menuList, int pid){
        for(Menu mu: menuList){
            //    id     id,add      
            if(Integer.valueOf(mu.getPid())==pid){
                //       
                treeMenuList(menuList,Integer.valueOf(mu.getId()));
                childMenu.add(mu);
            }
        }
    return childMenu;
    }

    public static void main(String args[]) {
        List menuList=new ArrayList();
        Menu mu=new Menu();
        mu.setId("1");
        mu.setName("  ");
        mu.setPid("0");
        Menu mu1=new Menu();
        mu1.setId("2");
        mu1.setName("  1");
        mu1.setPid("1");
        Menu mu2=new Menu();
        mu2.setId("3");
        mu2.setName("  1.1");
        mu2.setPid("2");
        Menu mu3=new Menu();
        mu3.setId("4");
        mu3.setName("  1.2");
        mu3.setPid("2");
        Menu mu4=new Menu();
        mu4.setId("5");
        mu4.setName("  2");
        mu4.setPid("1");
        Menu mu5=new Menu();
        mu5.setId("6");
        mu5.setName("  2.1");
        mu5.setPid("5");
        Menu mu6=new Menu();
        mu6.setId("7");
        mu6.setName("  2.2");
        mu6.setPid("5");
        Menu mu7=new Menu();
        mu7.setId("8");
        mu7.setName("  2.2.1");
        mu7.setPid("7");
        menuList.add(mu);
        menuList.add(mu1);
        menuList.add(mu2);
        menuList.add(mu3);
        menuList.add(mu4);
        menuList.add(mu5);
        menuList.add(mu6);
        menuList.add(mu7);

        List childList=treeMenuList(menuList,0);
        for(Menu m:childList){
            System.out.println(m.getId() + "   " + m.getName());
        }
    }
    }

3.コンソール結果:
3     1.1
4     1.2
2     1
6     2.1
8     2.2.1
7     2.2
5     2
1     

付録:
プロジェクトで再帰的に使用されるコード:
1.部門Department:
public class Department{
	/**
     * id
     */
    private Integer departmentId;

    /**
     *     
     */
    private String name;

    /**
     *     id,     1
     */
    private Integer parentId;

(  get,set  )
}

2.再帰コード(部門の下にあるすべてのサブ部門を問い合わせる):
/**
     *         id        
     */
    private void findChildDepartments(Set departHashSet, Integer departmentId) {
        Department dep=departmentRepository.findByDepartmentId(departmentId);
        List deptments = new ArrayList();
        deptments.add(dep);
        /**
         *       
         */
        departHashSet.addAll(deptments.stream().collect(Collectors.toList()));
        /**
         *      
         */
        List departments = departmentRepository.findByParentId(departmentId);
        for (Department d : departments) {
            /**
             *      
             */
            findChildDepartments(departHashSet, d.getDepartmentId());
        }
    }

再帰アルゴリズムの概念と数学アルゴリズムでの運用に関するコードについて述べた.
クリックしてリンクを開く