执行效果图
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();
}