从数据库检索的记录创建java递归数组列表

从数据库检索的记录创建java递归数组列表,java,database,recursion,arraylist,Java,Database,Recursion,Arraylist,我正在从数据库中获取记录,其中每个记录都有父列和子列,并且我正在以数组列表的形式检索这些记录。现在我想基于父子关系创建递归数组列表 假设我正在从数据库中检索下面的列表 Id ParentId Child Id 1 0 1 2 0 2 3 1 3 4 1 4 5 2 5 6 2 6 7 3 7 8 3 8

我正在从数据库中获取记录,其中每个记录都有父列和子列,并且我正在以数组列表的形式检索这些记录。现在我想基于父子关系创建递归数组列表

假设我正在从数据库中检索下面的列表

Id ParentId Child Id 1 0 1 2 0 2 3 1 3 4 1 4 5 2 5 6 2 6 7 3 7 8 3 8 9 4 9 10 4 10 11 5 11 12 5 12 父Id子Id 1 0 1 2 0 2 3 1 3 4 1 4 5 2 5 6 2 6 7 3 7 8 3 8 9 4 9 10 4 10 11 5 11 12 5 12 因此,第一个根节点0有一个子节点1,它有3、4个子节点。3将7和8作为子节点,4将9和10作为子节点,依此类推

Take reference from the below code : 

private static void createRecursiveList(ArrayList<MenuView> menuList)
    {
        MenuView mainMenuView = null;
        ArrayList<MenuView> mainMenuList = new ArrayList<MenuView>();

        int index = 0;

        for(MenuView menuView : menuList)
        {
            if(menuView.getParentId() == 0)
            {
                ArrayList<MenuView> childMenuList = new ArrayList<MenuView>();
                findChildIndex(index, menuList, childMenuList);

                if(childMenuList.size() > 0)
                    mainMenuList.add(childMenuList.get(0));
                else
                {
                    mainMenuView = new MenuView(menuView.getId(), menuView.getMenuName(), menuView.getParentId(), menuView.getOrder(), childMenuList);          
                    mainMenuList.add(mainMenuView);
                }
            }               

            index++;
        }

        printRecursiveList(mainMenuList);
    }


    private static void findChildIndex(int parentIndex, ArrayList<MenuView> menuList, ArrayList<MenuView> childMenuList)
    {
        MenuView mView = null;
        List<Integer> childIdxList = getChildIndex(parentIndex, menuList);

        if(childIdxList.size() > 0)
        {
            ArrayList<MenuView> childMenuLst = new ArrayList<MenuView>();

            for(Integer parentIdx : childIdxList)
            {
                findChildIndex(parentIdx, menuList, childMenuLst);

                if(!hasChilds(parentIdx, menuList))
                {
                    mView = new MenuView(menuList.get(parentIdx).getId(), menuList.get(parentIdx).getMenuName(), menuList.get(parentIdx).getParentId(), menuList.get(parentIdx).getOrder(), new ArrayList<MenuView>());// menuList.get(parentIdx).getChilds());
                    childMenuLst.add(mView);
                }
            }

            mView = new MenuView(menuList.get(parentIndex).getId(), menuList.get(parentIndex).getMenuName(), menuList.get(parentIndex).getParentId(), menuList.get(parentIndex).getOrder(), childMenuLst);
            childMenuList.add(mView);

        }
    }


    private static List<Integer> getChildIndex(int parentIndex, ArrayList<MenuView> menuList)
       {
           List<Integer> childIdxList = new ArrayList<Integer>();
           int index = 0;

           int parentId = menuList.get(parentIndex).getId();

           for(MenuView menuView : menuList)
           {
               if(menuView.getParentId() == parentId)
                   childIdxList.add(index);

               index ++;
           }       

           return childIdxList;
       }

    private static boolean hasChilds(int parentIndex, ArrayList<MenuView> menuList)
    {
        int parentId = menuList.get(parentIndex).getId();

        for(MenuView menuView : menuList)
        {
           if(menuView.getParentId() == parentId)
               return true;
        }

        return false;
    }


    private static void printRecursiveList(ArrayList<MenuView> mainMenuList)
    {
        int i = 0;

        System.out.println("Size of final list : "+mainMenuList.size()+"\n\n");

        while(i < mainMenuList.size())
        {
            System.out.println((i+1)+">>>> "+mainMenuList.get(i).toString());
            i++;
        }
    }
第二个根节点0有一个子节点2,该子节点2有5个子节点和6个子节点。5将11和12作为子节点,以此类推

Take reference from the below code : 

private static void createRecursiveList(ArrayList<MenuView> menuList)
    {
        MenuView mainMenuView = null;
        ArrayList<MenuView> mainMenuList = new ArrayList<MenuView>();

        int index = 0;

        for(MenuView menuView : menuList)
        {
            if(menuView.getParentId() == 0)
            {
                ArrayList<MenuView> childMenuList = new ArrayList<MenuView>();
                findChildIndex(index, menuList, childMenuList);

                if(childMenuList.size() > 0)
                    mainMenuList.add(childMenuList.get(0));
                else
                {
                    mainMenuView = new MenuView(menuView.getId(), menuView.getMenuName(), menuView.getParentId(), menuView.getOrder(), childMenuList);          
                    mainMenuList.add(mainMenuView);
                }
            }               

            index++;
        }

        printRecursiveList(mainMenuList);
    }


    private static void findChildIndex(int parentIndex, ArrayList<MenuView> menuList, ArrayList<MenuView> childMenuList)
    {
        MenuView mView = null;
        List<Integer> childIdxList = getChildIndex(parentIndex, menuList);

        if(childIdxList.size() > 0)
        {
            ArrayList<MenuView> childMenuLst = new ArrayList<MenuView>();

            for(Integer parentIdx : childIdxList)
            {
                findChildIndex(parentIdx, menuList, childMenuLst);

                if(!hasChilds(parentIdx, menuList))
                {
                    mView = new MenuView(menuList.get(parentIdx).getId(), menuList.get(parentIdx).getMenuName(), menuList.get(parentIdx).getParentId(), menuList.get(parentIdx).getOrder(), new ArrayList<MenuView>());// menuList.get(parentIdx).getChilds());
                    childMenuLst.add(mView);
                }
            }

            mView = new MenuView(menuList.get(parentIndex).getId(), menuList.get(parentIndex).getMenuName(), menuList.get(parentIndex).getParentId(), menuList.get(parentIndex).getOrder(), childMenuLst);
            childMenuList.add(mView);

        }
    }


    private static List<Integer> getChildIndex(int parentIndex, ArrayList<MenuView> menuList)
       {
           List<Integer> childIdxList = new ArrayList<Integer>();
           int index = 0;

           int parentId = menuList.get(parentIndex).getId();

           for(MenuView menuView : menuList)
           {
               if(menuView.getParentId() == parentId)
                   childIdxList.add(index);

               index ++;
           }       

           return childIdxList;
       }

    private static boolean hasChilds(int parentIndex, ArrayList<MenuView> menuList)
    {
        int parentId = menuList.get(parentIndex).getId();

        for(MenuView menuView : menuList)
        {
           if(menuView.getParentId() == parentId)
               return true;
        }

        return false;
    }


    private static void printRecursiveList(ArrayList<MenuView> mainMenuList)
    {
        int i = 0;

        System.out.println("Size of final list : "+mainMenuList.size()+"\n\n");

        while(i < mainMenuList.size())
        {
            System.out.println((i+1)+">>>> "+mainMenuList.get(i).toString());
            i++;
        }
    }
我的节点类如下所示,我将转换为json数组并在UI中显示为树

public class Node {
    private int parentId;
    private int childId ;
    private List<Node> children = new ArrayList<Node>();

    public int getParentId() {
        return parentId;
    }
    public void setParentId(int parentId) {
        this.parentId = parentId;
    }
    public int getChildId() {
        return childId;
    }
    public void setChildId(int childId) {
        this.childId = childId;
    }
    public List<Node> getChildren() {
        return children;
    }
    public void setChildren(List<Node> children) {
        this.children = children;
    }
}
公共类节点{
私有int-parentId;
私人智力儿童;
private List children=new ArrayList();
public int getParentId(){
返回parentId;
}
public void setParentId(int parentId){
this.parentId=parentId;
}
public int getChildId(){
返回childId;
}
公共无效setChildId(int childId){
this.childId=childId;
}
公共列表getChildren(){
返回儿童;
}
公共子项(列出子项){
这个。孩子=孩子;
}
}
我想创建树节点列表,如下所示 可以有任意数量的根节点和子节点

因此,第一个根节点0有一个子节点1,它有3、4个子节点。3将7和8作为子节点,4将9和10作为子节点,依此类推

Take reference from the below code : 

private static void createRecursiveList(ArrayList<MenuView> menuList)
    {
        MenuView mainMenuView = null;
        ArrayList<MenuView> mainMenuList = new ArrayList<MenuView>();

        int index = 0;

        for(MenuView menuView : menuList)
        {
            if(menuView.getParentId() == 0)
            {
                ArrayList<MenuView> childMenuList = new ArrayList<MenuView>();
                findChildIndex(index, menuList, childMenuList);

                if(childMenuList.size() > 0)
                    mainMenuList.add(childMenuList.get(0));
                else
                {
                    mainMenuView = new MenuView(menuView.getId(), menuView.getMenuName(), menuView.getParentId(), menuView.getOrder(), childMenuList);          
                    mainMenuList.add(mainMenuView);
                }
            }               

            index++;
        }

        printRecursiveList(mainMenuList);
    }


    private static void findChildIndex(int parentIndex, ArrayList<MenuView> menuList, ArrayList<MenuView> childMenuList)
    {
        MenuView mView = null;
        List<Integer> childIdxList = getChildIndex(parentIndex, menuList);

        if(childIdxList.size() > 0)
        {
            ArrayList<MenuView> childMenuLst = new ArrayList<MenuView>();

            for(Integer parentIdx : childIdxList)
            {
                findChildIndex(parentIdx, menuList, childMenuLst);

                if(!hasChilds(parentIdx, menuList))
                {
                    mView = new MenuView(menuList.get(parentIdx).getId(), menuList.get(parentIdx).getMenuName(), menuList.get(parentIdx).getParentId(), menuList.get(parentIdx).getOrder(), new ArrayList<MenuView>());// menuList.get(parentIdx).getChilds());
                    childMenuLst.add(mView);
                }
            }

            mView = new MenuView(menuList.get(parentIndex).getId(), menuList.get(parentIndex).getMenuName(), menuList.get(parentIndex).getParentId(), menuList.get(parentIndex).getOrder(), childMenuLst);
            childMenuList.add(mView);

        }
    }


    private static List<Integer> getChildIndex(int parentIndex, ArrayList<MenuView> menuList)
       {
           List<Integer> childIdxList = new ArrayList<Integer>();
           int index = 0;

           int parentId = menuList.get(parentIndex).getId();

           for(MenuView menuView : menuList)
           {
               if(menuView.getParentId() == parentId)
                   childIdxList.add(index);

               index ++;
           }       

           return childIdxList;
       }

    private static boolean hasChilds(int parentIndex, ArrayList<MenuView> menuList)
    {
        int parentId = menuList.get(parentIndex).getId();

        for(MenuView menuView : menuList)
        {
           if(menuView.getParentId() == parentId)
               return true;
        }

        return false;
    }


    private static void printRecursiveList(ArrayList<MenuView> mainMenuList)
    {
        int i = 0;

        System.out.println("Size of final list : "+mainMenuList.size()+"\n\n");

        while(i < mainMenuList.size())
        {
            System.out.println((i+1)+">>>> "+mainMenuList.get(i).toString());
            i++;
        }
    }
第二个根节点0有一个子节点2,该子节点2有5个子节点和6个子节点。5将11和12作为子节点,以此类推……

参考以下代码:
Take reference from the below code : 

private static void createRecursiveList(ArrayList<MenuView> menuList)
    {
        MenuView mainMenuView = null;
        ArrayList<MenuView> mainMenuList = new ArrayList<MenuView>();

        int index = 0;

        for(MenuView menuView : menuList)
        {
            if(menuView.getParentId() == 0)
            {
                ArrayList<MenuView> childMenuList = new ArrayList<MenuView>();
                findChildIndex(index, menuList, childMenuList);

                if(childMenuList.size() > 0)
                    mainMenuList.add(childMenuList.get(0));
                else
                {
                    mainMenuView = new MenuView(menuView.getId(), menuView.getMenuName(), menuView.getParentId(), menuView.getOrder(), childMenuList);          
                    mainMenuList.add(mainMenuView);
                }
            }               

            index++;
        }

        printRecursiveList(mainMenuList);
    }


    private static void findChildIndex(int parentIndex, ArrayList<MenuView> menuList, ArrayList<MenuView> childMenuList)
    {
        MenuView mView = null;
        List<Integer> childIdxList = getChildIndex(parentIndex, menuList);

        if(childIdxList.size() > 0)
        {
            ArrayList<MenuView> childMenuLst = new ArrayList<MenuView>();

            for(Integer parentIdx : childIdxList)
            {
                findChildIndex(parentIdx, menuList, childMenuLst);

                if(!hasChilds(parentIdx, menuList))
                {
                    mView = new MenuView(menuList.get(parentIdx).getId(), menuList.get(parentIdx).getMenuName(), menuList.get(parentIdx).getParentId(), menuList.get(parentIdx).getOrder(), new ArrayList<MenuView>());// menuList.get(parentIdx).getChilds());
                    childMenuLst.add(mView);
                }
            }

            mView = new MenuView(menuList.get(parentIndex).getId(), menuList.get(parentIndex).getMenuName(), menuList.get(parentIndex).getParentId(), menuList.get(parentIndex).getOrder(), childMenuLst);
            childMenuList.add(mView);

        }
    }


    private static List<Integer> getChildIndex(int parentIndex, ArrayList<MenuView> menuList)
       {
           List<Integer> childIdxList = new ArrayList<Integer>();
           int index = 0;

           int parentId = menuList.get(parentIndex).getId();

           for(MenuView menuView : menuList)
           {
               if(menuView.getParentId() == parentId)
                   childIdxList.add(index);

               index ++;
           }       

           return childIdxList;
       }

    private static boolean hasChilds(int parentIndex, ArrayList<MenuView> menuList)
    {
        int parentId = menuList.get(parentIndex).getId();

        for(MenuView menuView : menuList)
        {
           if(menuView.getParentId() == parentId)
               return true;
        }

        return false;
    }


    private static void printRecursiveList(ArrayList<MenuView> mainMenuList)
    {
        int i = 0;

        System.out.println("Size of final list : "+mainMenuList.size()+"\n\n");

        while(i < mainMenuList.size())
        {
            System.out.println((i+1)+">>>> "+mainMenuList.get(i).toString());
            i++;
        }
    }
私有静态void createRecursiveList(ArrayList菜单列表) { MenuView mainMenuView=null; ArrayList mainMenuList=新建ArrayList(); int指数=0; for(MenuView MenuView:menuList) { 如果(menuView.getParentId()==0) { ArrayList childMenuList=新建ArrayList(); findChildIndex(索引、菜单列表、儿童菜单列表); if(childMenuList.size()>0) mainMenuList.add(childMenuList.get(0)); 其他的 { mainMenuView=新建MenuView(MenuView.getId(),MenuView.getMenuName(),MenuView.getParentId(),MenuView.getOrder(),childMenuList); mainMenuList.add(mainMenuView); } } 索引++; } printRecursiveList(主菜单列表); } 私有静态void findChildIndex(int parentIndex、ArrayList菜单列表、ArrayList childMenuList) { MenuView mView=null; List childIdxList=getChildIndex(parentIndex,menuList); if(childIdxList.size()>0) { ArrayList childMenuLst=新建ArrayList(); for(整数parentIdx:childIdxList) { findChildIndex(parentIdx、menuList、childMenuLst); if(!hasChilds(parentIdx,menuList)) { mView=new MenuView(menuList.get(parentIdx).getId(),menuList.get(parentIdx.getMenuName(),menuList.get(parentIdx.getParentId(),menuList.get(parentIdx.getOrder(),new ArrayList());//menuList.get(parentIdx.getChilds()); childMenuLst.add(mView); } } mView=new MenuView(menuList.get(parentIndex).getId(),menuList.get(parentIndex.getMenuName(),menuList.get(parentIndex.getParentId(),menuList.get(parentIndex.getOrder(),childMenuLst)); childMenuList.add(mView); } } 私有静态列表getChildIndex(int parentIndex,ArrayList menuList) { List childIdxList=new ArrayList(); int指数=0; int parentId=menuList.get(parentIndex.getId(); for(MenuView MenuView:menuList) { if(menuView.getParentId()==parentId) 添加(索引); 索引++; } 返回儿童列表; } 私有静态布尔hasChilds(int parentIndex,ArrayList menuList) { int parentId=menuList.get(parentIndex.getId(); for(MenuView MenuView:menuList) { if(menuView.getParentId()==parentId) 返回true; } 返回false; } 私有静态void printRecursiveList(ArrayList mainMenuList) { int i=0; System.out.println(“最终列表的大小:“+mainMenuList.Size()+”\n\n”); 而(i>>>”+mainMenuList.get(i.toString()); i++; } }
好的,您需要什么帮助?我想从数据库检索的记录中创建递归树节点列表。例如父级0,然后是其子级,然后是其子级,等等。。第二个家长0,然后是他们的孩子,然后是他们的孩子等等。我们得到了这一部分,但这是一个解决具体问题的地方,而不是抛出一个想法,让我们为你做。我通过递归调用解决了它!!!:)