欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java实现zTree的遍历

程序员文章站 2024-03-05 15:09:12
...

entity代码:

public class CategoryVO {
	private Integer id;
	private Integer pId;
	private String name;
	private String url;
	private List<CategoryVO> children=new ArrayList<CategoryVO>();
	//get set 省略
}

数据是这样的:
java实现zTree的遍历
实现代码:

public List<CategoryVO> list(String name,Model model){
		List<CategoryVO> categoryList = CategoryJDBC.getCategoryList();
		
		HashMap<Integer, CategoryVO> tmpMap = new HashMap<>(); // 所有对象存放到map中
		for (CategoryVO categoryVO : categoryList) {
			tmpMap.put(categoryVO.getId(), categoryVO);
		}
		
		ArrayList<CategoryVO> arrayList = new ArrayList<>(); // 结果list,之所以用list,是考虑到有多个根目录的情况
		for (CategoryVO categoryVO : categoryList) {  // 遍历所有元素,放到对应的父节点
			if(tmpMap.get(categoryVO.getpId())!=null && categoryVO.getId()!=categoryVO.getpId() ){
				CategoryVO categoryVO2 = tmpMap.get(categoryVO.getpId()); //map中找到父节点
				List<CategoryVO> children = categoryVO2.getChildren(); 
				children.add(categoryVO); // 添加到父节点的children里
				categoryVO2.setChildren(children); 
				tmpMap.put(categoryVO2.getId(), categoryVO2); //重置添加children后的map
				
			}else{
				arrayList.add(categoryVO);
			}
		}
		return categoryList;
	}

该方法只用了2次遍历。
第一次,遍历所有对象,放到tmpMap中。
第二次,遍历所有对象,通过tmpMap找到每个节点对应的父节点,并添加到父节点children中。然后父节点再放回map。