java遞迴擷取某個父節點下面的所有子節點__java厚積薄發系列

來源:互聯網
上載者:User

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<Menu> childMenu=new ArrayList<Menu>();    /**     * 擷取某個父節點下面的所有子節點     * @param menuList     * @param pid     * @return     */    public static List<Menu> treeMenuList( List<Menu> 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<Menu> menuList=new ArrayList<Menu>();        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<Menu> childList=treeMenuList(menuList,0);        for(Menu m:childList){            System.out.println(m.getId() + "   " + m.getName());        }    }    }


3.控制台結果:

3   目錄1.14   目錄1.22   目錄16   目錄2.18   目錄2.2.17   目錄2.25   目錄21   目錄


附錄:

遞迴在項目的使用代碼:

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<Department> departHashSet, Integer departmentId) {        Department dep=departmentRepository.findByDepartmentId(departmentId);        List<Department> deptments = new ArrayList<Department>();        deptments.add(dep);        /**         * 加入當前單位         */        departHashSet.addAll(deptments.stream().collect(Collectors.toList()));        /**         * 擷取子單位         */        List<Department> departments = departmentRepository.findByParentId(departmentId);        for (Department d : departments) {            /**             * 遞迴子單位             */            findChildDepartments(departHashSet, d.getDepartmentId());        }    }


上文講了遞迴演算法的概念,以及在數學演算法中的運用的相關代碼:


點擊開啟連結




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.