java 递归处理树形结构数据

您所在的位置:网站首页 java递归树形结构获取每一级数据 java 递归处理树形结构数据

java 递归处理树形结构数据

2024-07-13 21:21| 来源: 网络整理| 查看: 265

在实战开发中经常有树形菜单、树形目录等业务需求。在设计数据库时一般使用idparentId的结构来做。本文简单介绍以递归方式处理树形数据。

package com.agileai.esb.smc.domain; import java.util.*; import net.sf.json.JSONArray; public class TreeBuilder { List nodes = new ArrayList(); public TreeBuilder(List nodes) { super(); this.nodes= nodes; } /** * 构建JSON树形结构 * @return */ public String buildJSONTree() { List nodeTree = buildTree(); JSONArray jsonArray = JSONArray.fromObject(nodeTree); return jsonArray.toString(); } /** * 构建树形结构 * @return */ public List buildTree() { ListtreeNodes = new ArrayList(); ListrootNodes = getRootNodes(); for (Node rootNode : rootNodes) { buildChildNodes(rootNode); treeNodes.add(rootNode); } return treeNodes; } /** * 递归子节点 * @param node */ public void buildChildNodes(Node node) { List children = getChildNodes(node); if (!children.isEmpty()) { for(Node child : children) { buildChildNodes(child); } node.setMenus(children); } } /** * 获取父节点下所有的子节点 * @param nodes * @param pnode * @return */ public List getChildNodes(Node pnode) { ListchildNodes = new ArrayList(); for (Node n : nodes){ if (pnode.getId().equals(n.getPid())) { childNodes.add(n); } } return childNodes; } /** * 判断是否为根节点 * @param nodes * @param inNode * @return */ public boolean rootNode(Node node) { boolean isRootNode = true; for (Node n : nodes){ if (node.getPid().equals(n.getId())) { isRootNode= false; break; } } return isRootNode; } /** * 获取集合中所有的根节点 * @param nodes * @return */ public List getRootNodes() { ListrootNodes = new ArrayList(); for (Node n : nodes){ if (rootNode(n)) { rootNodes.add(n); } } return rootNodes; } public static class Node { private String id; private String pid; private String text; private String url; private List menus; public Node() {} public Node(String id, String pid, String text, String url) { super(); this.id =id; this.pid =pid; this.text =text; this.url =url; } public String getId() { return id; } public void setId(String id) { this.id =id; } public String getPid() { return pid; } public void setPid(String pid) { this.pid =pid; } public String getText() { return text; } public void setText(String text) { this.text =text; } public String getUrl() { return url; } public void setUrl(String url) { this.url =url; } public List getMenus() { return menus; } public void setMenus(List menus) { this.menus= menus; } } public static void main(String[] args) { Listnodes = new ArrayList(); Node p1 = new Node("01", "","01", ""); Node p6 = new Node("02", "","02", ""); Node p7 = new Node("0201", "02","0201", ""); Node p2 = new Node("0101", "01","0101", ""); Node p3 = new Node("0102", "01","0102", ""); Node p4 = new Node("010101", "0101","010101", ""); Node p5 = new Node("010102", "0101","010102", ""); Node p8 = new Node("03", "","03", ""); nodes.add(p1); nodes.add(p2); nodes.add(p3); nodes.add(p4); nodes.add(p5); nodes.add(p6); nodes.add(p7); nodes.add(p8); TreeBuilder treeBuilder = new TreeBuilder(nodes); System.out.println(treeBuilder.buildJSONTree()); } }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3