从数据库检索的记录创建java递归数组列表
我正在从数据库中获取记录,其中每个记录都有父列和子列,并且我正在以数组列表的形式检索这些记录。现在我想基于父子关系创建递归数组列表 假设我正在从数据库中检索下面的列表 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作为子节点,依此类推从数据库检索的记录创建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
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,然后是他们的孩子,然后是他们的孩子等等。我们得到了这一部分,但这是一个解决具体问题的地方,而不是抛出一个想法,让我们为你做。我通过递归调用解决了它!!!:)