123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- * 创建时间:2017-08-16 22:59
- * 项目名称:kmall_pt
- * 类名称:TreeUtils.java
- * 包名称:com.kmall.common.utils
- *
- * 修改履历:
- * 日期 修正者 主要内容
- *
- *
- * Copyright (c) 2016-2017 兆尹科技
- */
- package com.kmall.common.utils;
- import org.apache.commons.collections.CollectionUtils;
- import java.lang.reflect.Field;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * 名称:TreeUtils <br>
- * 描述:<br>
- *
- * @author Scott
- * @version 1.0
- * @since 1.0.0
- */
- public class TreeUtils {
- /**
- * 包装成树形结构 (全部属性)
- * 必须要有id parentId children
- *
- * @param tree
- * @return
- * @throws Exception
- */
- public static List factorTree(List tree) {
- try {
- if (tree != null) {
- List t_list = new ArrayList();
- Map map = new HashMap();
- for (Object o : tree) {
- Class clazz = o.getClass();
- Field id = clazz.getDeclaredField("id");
- if (!id.isAccessible()) {
- id.setAccessible(true);
- }
- Integer lId = (Integer) id.get(o);
- map.put(lId, o);
- }
- for (Object o : map.keySet()) {
- Integer cId = (Integer) o;
- Object obj = map.get(cId);
- Class clazz = obj.getClass();
- Field pId = clazz.getDeclaredField("parentId");
- if (!pId.isAccessible()) {
- pId.setAccessible(true);
- }
- Integer id = (Integer) pId.get(obj);
- if (null == map.get(id)) {
- t_list.add(obj);
- } else {
- Object object = map.get(id);
- Class clazz1 = object.getClass();
- Field children = null;
- try {
- //没有children属性就到父类查找
- children = clazz1.getDeclaredField("children");
- } catch (Exception e) {
- children = clazz1.getSuperclass().getDeclaredField("children");
- }
- if (!children.isAccessible()) {
- children.setAccessible(true);
- }
- List list = (List) children.get(object);
- if (CollectionUtils.isEmpty(list)) {
- list = new ArrayList();
- }
- list.add(obj);
- children.set(object, list);
- }
- }
- return t_list;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- }
|