递归
- 如何用java实现树形结构
- List树形结构转Map
如何用java实现树形结构
@Data
public class TsetVo {private Integer roleId;//角色IDprivate Integer menuId;//菜单IDprivate Integer parentId;//上级IDprivate String menuName;//菜单名称private String url;//菜单地址private List<TsetVo> children; //子菜单
}
/*** 树形结构解析* @param testList 原始数据列表* @return*/public List<TsetVo> buildTree(List<TestList > list) {// 创建顶层节点列表List<TsetVo> treeList = new ArrayList<>();Map<Integer, TsetVo> nodeMap = new HashMap<>();for (TsetVo node : list) {nodeMap.put(node.getMenuId(), node); //通过menuId查找节点}for (TsetVo node : list) {Integer parentId = node.getParentId();if (parentId == null) { // 没有父节id,说明是顶层节点treeList.add(node);} else { // 有父id,将节点添加到父节点的children列表中TsetVo parent = nodeMap.get(parentId);if (parent != null && !parentId.equals(node.getMenuId())) {List<TsetVo> children = parent.getChildren();if (children == null) {children = new ArrayList<>();parent.setChildren(children);}children.add(node);buildTree(children);}}}return treeList;}
在自己的逻辑中调用递归方法,即可。
List树形结构转Map
//需要的结构
private Map<String,String> needMap;
将得到的list的树形结构转map
Map<String, String> jurisdictionMap = new HashMap<>(); //创建map结构for (TsetVo tsetVo : tsetVos) {jurisdictionMap.put("", ""); //塞自己需要的数据}