/* * 创建时间: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
* 描述:
* * @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; } }