声明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;
}
}