java根据父id遍历出父子树形关系(通用)

执行效果图

在这里插入图片描述

1.创建一个实体类,此类是将需要遍历父子关系的实体类的id和父id存进该类,最终使用工具类进行统一遍历,使该工具类达到通用(多数通用工具类会损失执行效率)的目的,也可以参考我的遍历条件写出专属的更高效的方法,


import lombok.Data;
//此注解为自动添加get、set、toString方法的,需要jar包,可自己生成getset,
@Data
public class Parent {
	private Integer id;
	private String name;
	private Integer parentId;
	public Parent(Integer id, String name, Integer parentId) {
		super();
		this.id = id;
		this.name = name;
		this.parentId = parentId;
	}
	
}

2.添加工具操作类

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

import com.xx.fresh.bean.Parent;

public class MakeList {
	private List<Parent> list;
	private List<Parent> resultList=new ArrayList<Parent>();
	private String addName;
	public void  setAddName(String add) {
		addName=add;
	}
	public void  setList(List<Parent> list) {
		this.list=list;
	}
	public List<Parent> getList(){
		make();
		return resultList;
	}
	private void make() {
		for(Parent p:list) {
			if(p.getParentId()==null) {
				resultList.add(p);
				//子菜单上加的横杠
				String h="";
				traverseList(p.getId(),h);
			}
		}
	}
	private void traverseList(int id,String h) {
		h=h+addName;
		for(Parent p:list) {
			
			if(p.getParentId()!=null&&p.getParentId()==id) {
				p.setName(h+p.getName());
				resultList.add(p);
				traverseList(p.getId(),h);
			}
		}
	}
	
}

3.调用方法

//Classify(分类)是要遍历父子关系的实体类,
	private List<Parent> doParent(List<Classify> list){
		List<Parent> list2=new ArrayList<Parent>();
		for(Classify c:list) {
			list2.add(new Parent(c.getClassifyId(), c.getClassifyName(), c.getClassifyParentId()));
		}
		MakeList makeList=new MakeList();
		makeList.setList(list2);
		//在父子级前加上标识,可自定义或不写
		makeList.setAddName("- ");
		//通过调用工具类返回一个id、name、父id的排序后的列表
		return makeList.getList();
	}

猜你喜欢

转载自blog.csdn.net/qq_41844287/article/details/93859931