java 生成树形_java树形结构生成工具类

1 /**

2 * ***************************************************************************3 *模块名 :4 *创建时间 : 2017年9月7日5 *实现功能 :树形结构处理工具类6 *作者 : 揣怀梦想的猪7 *版本 : v0.0.18 -----------------------------------------------------------------------------9 *修改记录:10 *日 期 版本 修改人 修改内容11 *2017年9月7日 v0.0.1 揣怀梦想的猪 创建12 ****************************************************************************13 */

14 public classTreeUtils {15 private static final String COLUMN_ID_LOWCASE = "categoryCode"; //编号字段

16 private static final String COLUMN_CHILDREN = "children";17 private static final String PARENT_FIELD_NAME="parentCode";18 private static Logger logger = LoggerFactory.getLogger(TreeUtils.class);19

20 /**

21 * ====================================================================22 *函 数 名:23 *@paramparent24 *@paramtreeDataList25 *@return

26 *功 能: 通过父节点获取子节点生成树形结构数据27 ----------------------------------------------------------------------28 *修改记录 :29 *日 期 版本 修改人 修改内容30 *2017年8月31日 v0.0.1 揣怀梦想的猪 创建31 ====================================================================32 */

33 public static List treeNode(String parent, ListtreeDataList) {34 List trees = null;35 try{36 if (trees == null) {37 trees = new ArrayList();38 }39

40 if (treeDataList == null) {41 returntrees;42 }43

44 for(T t : treeDataList) {45 if(getFiledVal(t,PARENT_FIELD_NAME).equals(parent)) {46 setFiledVal(t,COLUMN_CHILDREN,treeNode(getFiledVal(t,COLUMN_ID_LOWCASE), treeDataList));47 trees.add(t);48 }49 }50 } catch(Exception e) {51 logger.error("递归生成树节点错误: " +e);52 }53

54 returntrees;55 }56

57

58 public static List treeNodeList(String parent, ListtreeDataList){59 return treeNodeList(parent, treeDataList,null);60 }61

62

63 /**

64 * ====================================================================65 *函 数 名:66 *@paramparent 传入当前节点名称67 *@paramtreeDataList68 *@return

69 *@return

70 *功 能: 通过父节点获取子节点返回列表结构数据71 ----------------------------------------------------------------------72 *修改记录 :73 *日 期 版本 修改人 修改内容74 *2017年8月31日 v0.0.1 揣怀梦想的猪 创建75 ====================================================================76 */

77 private static List treeNodeList(String parent, List treeDataList,Listtrees) {78 try{79

80 if (treeDataList == null) {81 returntrees;82 }83

84 for(T t : treeDataList) {85 if(getFiledVal(t,PARENT_FIELD_NAME).equals(parent)) {86 trees.add(t);87 treeNodeList(getFiledVal(t,COLUMN_ID_LOWCASE), treeDataList,trees);88 }89 }90 } catch(Exception e) {91 logger.error("递归生成树节点错误: " +e);92 }93

94 returntrees;95 }96

97

98 public static Map childToParentNode(String parent, ListtreeDataList){99 return childToParentNode(parent,treeDataList,null);100 }101

102 /**

103 * ====================================================================104 *函 数 名:105 *@paramparent 传入子节点对应的上级节点106 *@paramtreeDataList 数据源107 *@paramtrees 获取到的父节点数据108 *@paramuser109 *@return

110 *功 能:通过子节点获取到对应父节点数据111 ----------------------------------------------------------------------112 *修改记录 :113 *日 期 版本 修改人 修改内容114 *2017年8月31日 v0.0.1 揣怀梦想的猪 创建115 ====================================================================116 */

117 public static Map childToParentNode(String parent, ListtreeDataList,118 Maptrees) {119 try{120 if (trees == null) {121 trees = new HashMap();122 }123

124 if (treeDataList == null) {125 returntrees;126 }127

128 for(T t : treeDataList) {129 if(getFiledVal(t, COLUMN_ID_LOWCASE).equals(parent)) {130 trees.put(getFiledVal(t, COLUMN_ID_LOWCASE), t);131 childToParentNode(getFiledVal(t, PARENT_FIELD_NAME), treeDataList, trees);132 break;133 }134 }135 } catch(Exception e) {136 logger.error("执行childToParentNode时发生错误: " +e);137 }138

139 returntrees;140 }141

142 /**

143 * ====================================================================144 *函 数 名:145 *@paramt146 *@paramname147 *@return

148 *功 能: 获取字段值149 ----------------------------------------------------------------------150 *修改记录 :151 *日 期 版本 修改人 修改内容152 *2017年9月6日 v0.0.1 揣怀梦想的猪 创建153 ====================================================================154 */

155 private static String getFiledVal(T t, String name) {156 try{157 Field[] fields =t.getClass().getDeclaredFields();158 for (int i = 0,j=fields.length; i

164 Object obj=fields[i].get(t);165 if(obj==null){166 return "";167 }else{168 returnobj.toString();169 }170 } else if (fields[i].getType().getName().equals(java.lang.Integer.class.getName())171 || fields[i].getType().getName().equals("int")) {172 //Integer type

173 Object obj=fields[i].get(t);174 if(obj==null){175 return "";176 }else{177 returnString.valueOf(obj);178 }179 }180 }181 }182 } catch(Exception ex) {183 ex.printStackTrace();184 }185

186 return "";187 }188

189 /**

190 * ====================================================================191 *函 数 名:192 *@paramt193 *@paramname194 *@paramvalue195 *功 能:196 ----------------------------------------------------------------------197 *修改记录 :198 *日 期 版本 修改人 修改内容199 *2017年9月6日 v0.0.1 揣怀梦想的猪 创建200 ====================================================================201 */

202 public static void setFiledVal(T t, String name, Listlist) {203 try{204 Field[] fields =t.getClass().getDeclaredFields();205 for (int i = 0; i < fields.length; i++) {206 fields[i].setAccessible(true);207 if(name.equals(fields[i].getName())) {208 fields[i].set(t, list);209 break;210 }211 }212 } catch(Exception e) {213 e.printStackTrace();214 }215 }216

217 public static voidmain(String[] args) {218 ScmMaterialCategoryVo vo=newScmMaterialCategoryVo();219 List list=new ArrayList<>();220 ScmMaterialCategoryVo temp=newScmMaterialCategoryVo();221 temp.setCategoryCode("测试赛");222 list.add(temp);223 setFiledVal(vo, "children", list);224 System.out.println(vo);225 }226 }

好的,我可以回答这个问题。以下是一个简单的 Java 工具类,用于生成树结构数据: ``` import java.util.ArrayList; import java.util.List; public class TreeUtils { public static List<Node> buildTree(List<Node> nodes) { List<Node> roots = new ArrayList<>(); for (Node node : nodes) { if (node.getParentId() == null) { roots.add(node); } else { for (Node parent : nodes) { if (parent.getId().equals(node.getParentId())) { parent.addChild(node); break; } } } } return roots; } public static class Node { private String id; private String parentId; private String name; private List<Node> children = new ArrayList<>(); public Node(String id, String parentId, String name) { this.id = id; this.parentId = parentId; this.name = name; } public String getId() { return id; } public String getParentId() { return parentId; } public String getName() { return name; } public List<Node> getChildren() { return children; } public void addChild(Node child) { children.add(child); } } } ``` 这个工具类包含一个 `Node` 类,用于表示树形结构中的一个节点,以及一个 `buildTree` 方法,用于将节点列表转换为树形结构。使用方法如下: ``` List<TreeUtils.Node> nodes = new ArrayList<>(); nodes.add(new TreeUtils.Node("1", null, "Root")); nodes.add(new TreeUtils.Node("2", "1", "Child 1")); nodes.add(new TreeUtils.Node("3", "1", "Child 2")); nodes.add(new TreeUtils.Node("4", "2", "Grandchild 1")); nodes.add(new TreeUtils.Node("5", "2", "Grandchild 2")); List<TreeUtils.Node> roots = TreeUtils.buildTree(nodes); ``` 这将生成一个树形结构,其中根节点为 `Root`,它有两个子节点 `Child 1` 和 `Child 2`,`Child 1` 又有两个子节点 `Grandchild 1` 和 `Grandchild 2`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值