java树形结构生成工具类

  1 /**
  2  * ***************************************************************************
  3  *模块名 :
  4  *创建时间 : 2017年9月7日
  5  *实现功能 :树形结构处理工具类
  6  *作者 : 揣怀梦想的猪
  7  *版本 : v0.0.1
  8 -----------------------------------------------------------------------------
  9  *修改记录:
 10  *日 期 版本 修改人 修改内容
 11  *2017年9月7日 v0.0.1 揣怀梦想的猪 创建
 12  ****************************************************************************
 13  */
 14 public class TreeUtils {
 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      *@param parent
 24      *@param treeDataList
 25      *@return
 26      *功 能: 通过父节点获取子节点生成树形结构数据
 27     ----------------------------------------------------------------------
 28      *修改记录 :
 29      *日 期  版本 修改人 修改内容
 30      *2017年8月31日 v0.0.1 揣怀梦想的猪 创建
 31     ====================================================================
 32      */
 33     public static <T extends Object> List<T> treeNode(String parent, List<T> treeDataList) {
 34         List<T> trees = null;
 35         try {
 36             if (trees == null) {
 37                 trees = new ArrayList<T>();
 38             }
 39 
 40             if (treeDataList == null) {
 41                 return trees;
 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         return trees;
 55     }
 56     
 57     
 58     public static <T extends Object> List<T> treeNodeList(String parent, List<T> treeDataList){
 59         return treeNodeList(parent, treeDataList,null);
 60     }
 61     
 62     
 63     /**
 64      * ====================================================================
 65      *函 数 名: 
 66      *@param parent 传入当前节点名称
 67      *@param treeDataList
 68      * @return 
 69      *@return
 70      *功 能: 通过父节点获取子节点返回列表结构数据
 71     ----------------------------------------------------------------------
 72      *修改记录 :
 73      *日 期  版本 修改人 修改内容
 74      *2017年8月31日 v0.0.1 揣怀梦想的猪 创建
 75     ====================================================================
 76      */
 77     private  static <T extends Object> List<T> treeNodeList(String parent, List<T> treeDataList,List<T> trees) {
 78         try {
 79 
 80             if (treeDataList == null) {
 81                 return trees;
 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         return trees;
 95     }
 96     
 97     
 98     public static <T extends Object> Map<String, T> childToParentNode(String parent, List<T> treeDataList){
 99         return childToParentNode(parent,treeDataList,null);
100     }
101     
102     /**
103      * ====================================================================
104      *函 数 名: 
105      *@param parent 传入子节点对应的上级节点
106      *@param treeDataList 数据源
107      *@param trees 获取到的父节点数据
108      *@param user
109      *@return
110      *功 能:通过子节点获取到对应父节点数据
111     ----------------------------------------------------------------------
112      *修改记录 :
113      *日 期  版本 修改人 修改内容
114      *2017年8月31日 v0.0.1 揣怀梦想的猪 创建
115     ====================================================================
116      */
117     public static <T extends Object> Map<String, T> childToParentNode(String parent, List<T> treeDataList,
118             Map<String, T> trees) {
119         try {
120             if (trees == null) {
121                 trees = new HashMap<String, T>();
122             }
123 
124             if (treeDataList == null) {
125                 return trees;
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         return trees;
140     }
141     
142     /**
143      * ====================================================================
144      *函 数 名: 
145      *@param t
146      *@param name
147      *@return
148      *功 能: 获取字段值
149     ----------------------------------------------------------------------
150      *修改记录 :
151      *日 期  版本 修改人 修改内容
152      *2017年9月6日 v0.0.1 揣怀梦想的猪 创建
153     ====================================================================
154      */
155     private static <T extends Object> String getFiledVal(T t, String name) {
156         try {
157             Field[] fields = t.getClass().getDeclaredFields();
158             for (int i = 0,j=fields.length; i <j ; i++) {
159                 String fieldName = fields[i].getName();
160                 if (name.equals(fieldName)) {
161                     fields[i].setAccessible(true);
162                     if (fields[i].getType().getName().equals(java.lang.String.class.getName())) {
163                         // String type
164                         Object obj= fields[i].get(t);
165                         if(obj==null){
166                             return "";
167                         }else{
168                             return obj.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                             return String.valueOf(obj);
178                         }
179                     }
180                 }
181             }
182         } catch (Exception ex) {
183             ex.printStackTrace();
184         }
185 
186         return "";
187     }
188     
189     /**
190      * ====================================================================
191      *函 数 名: 
192      *@param t
193      *@param name
194      *@param value
195      *功 能: 
196     ----------------------------------------------------------------------
197      *修改记录 :
198      *日 期  版本 修改人 修改内容
199      *2017年9月6日 v0.0.1 揣怀梦想的猪 创建
200     ====================================================================
201      */
202     public static <T extends Object> void setFiledVal(T t, String name, List<T> list) {
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 void main(String[] args) {
218         ScmMaterialCategoryVo vo=new ScmMaterialCategoryVo();
219         List<ScmMaterialCategoryVo> list=new ArrayList<>();
220         ScmMaterialCategoryVo temp=new ScmMaterialCategoryVo();
221         temp.setCategoryCode("测试赛");
222         list.add(temp);
223         setFiledVal(vo, "children", list);
224         System.out.println(vo);
225     }
226 }

 

转载于:https://www.cnblogs.com/yishidesinian/p/7489861.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值