JAVA递归查询与反向递归(菜单层级显示)

查询子级菜单递归查询具体实现方法1(JAVA8): 

   public void getTreeCategory() {
        //查询所有的分类
        List vipGoodsCategoryList = vipGoodsCategoryService.listGoodsCategory();
        //查询顶级分类
        List top = vipGoodsCategoryList.stream().filter(x -> StringUtils.isEmpty(x.getParentId()) || x.getParentId().equals("-1")).collect(Collectors.toList());
        //parentId作为key,子级作为value组成的map
        Map> allMap = vipGoodsCategoryList.stream().collect(Collectors.groupingBy(VipGoodsCategory::getParentId));
        //递归查询
        List list = this.treeCategoryData(top, allMap);
        for (VipGoodsCategory category : list) {
            System.out.println(category.getAuId()+","+category.getCategoryName()+","+category.getParentId()+","+category.getChildren().get(0).getCategoryName());
        }
    }

    public List treeCategoryData(List top, Map> allMap) {
        //遍历
        top.forEach(category -> {
            List temp = allMap.get(category.getAuId());
            if (temp != null && !temp.isEmpty()) {
                category.setChildren(temp);
                treeCategoryData(category.getChildren(), allMap);
            } else {
                category.setChildren(new ArrayList<>());
            }
        });
        return top;
    }

查询子级菜单递归查询具体实现方法2: 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.lhm.value.TreeJson;

public class RecursiveTreeMap {
	
	public static List getTreeMap(List treeList) {
		List parentTreeList = new ArrayList();
		List childrenTreeList = new ArrayList();
		Map allIdMap = new HashMap();
		if (treeList == null || treeList.size() == 0) {
			return parentTreeList;
		}
		for (TreeJson tree : treeList){
			allIdMap.put(tree.getId(), tree.getId());
		}
		//遍历找出所有的根节点和非根节点
		for (TreeJson tree : treeList) {
			if ("-1".equals(tree.getParentid()) || !allIdMap.containsKey(tree.getParentid())){
				parentTreeList.add(tree);
			}else{
				childrenTreeList.add(tree);
			}
		}
		//递归获取所有子节点
		if (parentTreeList != null && parentTreeList.size() > 0) {
			for (TreeJson tree : parentTreeList) {
				//添加所有子级
				List children = getChildrenTreeList(childrenTreeList, tree.getId());
				tree.setChildren(children);
			}
		}
		return parentTreeList;
	}
	
	//递归查询子节点
	public static List getChildrenTreeList(List childrenList, String parentId) {
		List parentTreeList = new ArrayList();
		List childrenTreeList = new ArrayList();
		if (childrenList == null || childrenList.size() == 0) {
			return parentTreeList;
		}
		//找出所有的根节点和非根节点
		for (TreeJson tree : childrenList) {
			if (parentId.equals(tree.getParentid())) {
				parentTreeList.add(tree);
			} else {
				childrenTreeList.add(tree);
			}
		}
		//查询子节点
		if (parentTreeList != null && parentTreeList.size() > 0) {
			for (TreeJson tree : parentTreeList) {
				//递归查询子节点
				List children = getChildrenTreeList(childrenTreeList, tree.getId());
				tree.setChildren(children);
			}
		}
		return parentTreeList;
	}

}

 查询父级菜单递归查询具体实现方法:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.lhm.value.TreeJson;

public class RecursiveParentTree {
	
    public static List getParentTree(List treeList) {
    	List parentTreeList = new ArrayList();
		List childrenTreeList = new ArrayList();
		Map parentIdMap = new HashMap();
		if (treeList == null || treeList.size() == 0) {
			return childrenTreeList;
		}
		for (TreeJson tree : treeList){
			parentIdMap.put(tree.getParentid(), tree.getParentid());
		}
		//遍历找出所有的根节点和非根节点
		for (TreeJson tree : treeList) {
			if ("-1".equals(tree.getParentid()) || parentIdMap.containsKey(tree.getId())) {
				parentTreeList.add(tree);
			}else {
				childrenTreeList.add(tree);
			}
		}
		//递归获取所有父节点
		if (childrenTreeList != null && childrenTreeList.size() > 0) {
			for (TreeJson tree : childrenTreeList) {
				//添加所有父级
				List parents = getParentTreeList(parentTreeList, tree.getParentid());
				tree.setParents(parents);
			}
		}
		return childrenTreeList;
    }
    
	//递归查询父节点
	private static List getParentTreeList(List parents, String id) {
		List parentTreeList = new ArrayList();
		List childrenTreeList = new ArrayList();
		if (parents == null || parents.size() == 0) {
			return childrenTreeList;
		}
		//找出所有的根节点和非根节点
		for (TreeJson tree : parents) {
			if (id.equals(tree.getId())) {
				childrenTreeList.add(tree);
			} else {
				parentTreeList.add(tree);
			}
		}
		//查询父节点
		if (childrenTreeList != null && childrenTreeList.size() > 0) {
			for (TreeJson tree : childrenTreeList) {
				//递归查询父节点
				List parentList = getParentTreeList(parentTreeList, tree.getParentid());
				tree.setParents(parentList);
			}
		}
		return childrenTreeList;
	}

}

TreeJson实体类

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

public class TreeJson {
	private String id;
	private String text;
	private String parentid;
	private String url;
	private String iconcls;
	private List children = new ArrayList();
	private List parents = new ArrayList();
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getParentid() {
		return parentid;
	}
	public void setParentid(String parentid) {
		this.parentid = parentid;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getIconcls() {
		return iconcls;
	}
	public void setIconcls(String iconcls) {
		this.iconcls = iconcls;
	}
	public List getChildren() {
		return children;
	}
	public void setChildren(List children) {
		this.children = children;
	}
	public List getParents() {
		return parents;
	}
	public void setParents(List parents) {
		this.parents = parents;
	}

}

花了一点时间整理出来, 有任何问题欢迎指导

 

你可能感兴趣的:(JAVA)