声明INode类
import java.io.Serializable;import java.util.List;/** * 树形结构节点类 * * @param <T> * @author xq */public interface INode<T> extends Serializable { /** * 获取当前ID * * @return id */ Long getId(); /** * 获取父节点id * * @return parent_id */ Long getParentId(); /** * 获取子类 * * @return Children */ List<T> getChildren();}
声明TreeUtil
/** * @author xq */public class TreeUtil { public static TreeUtil build() { return new TreeUtil(); } public <T extends INode> List<T> merge(List<T> items) { if (items == null || items.size() < 2) { return items; } List<T> list = new ArrayList<>(); Map<Long, Integer> map = new HashMap<>(items.size()); for (int i = 0; i < items.size(); i++) { // 获取当前所在array中的下标 map.put(items.get(i).getId(), i); } Integer index; for (T item : items) { // 通过上级ID获取上级所在array中的位置 index = map.get(item.getParentId()); // 如果有那么加入子集 if (index != null) { items.get(index) .getChildren() .add(item); } else { // 如果没有则加入集合 list.add(item); } } return list; }}