/**
* 树列表Domain类的接口
*/
public interface TreeItemInterface {
Integer getId();
Integer getParentId();
List getChildren();
void setChildren(List children);
}
/**
* 树列表帮助类
*
* @param <T>
*/
public class TreeListHelper<T extends TreeItemInterface> {
/**
* 获取带本节点的树列表
*
* @param sourceList
* @param parentId
* @return
*/
public List<T> getTreeListByParentId(List<? extends TreeItemInterface> sourceList, int parentId) {
List<T> targetList = new ArrayList<>();
//先把自己获取
T rootTreeItem = null;
for (TreeItemInterface ti : sourceList) {
if (ti.getId() == parentId) {
rootTreeItem = (T) ti;
}
}
if (rootTreeItem != null) {
//再把子项获取
rootTreeItem.setChildren(getChildrenTreeListByParentId(sourceList, parentId));
targetList.add(rootTreeItem);
}
return targetList;
}
/**
* 获取不带本节点的树列表
*
* @param sourceList
* @param parentId
* @return
*/
public List<T> getChildrenTreeListByParentId(List<? extends TreeItemInterface> sourceList, int parentId) {
List<TreeItemInterface> targetList = new ArrayList<>();
for (TreeItemInterface item : sourceList) {
if (item.getParentId() == parentId) {
boolean hasChildren = false;
for (TreeItemInterface tempItem : sourceList) {
if (tempItem.getParentId() == item.getId()) {
hasChildren = true;
break;
}
}
if (hasChildren) {
item.setChildren(getChildrenTreeListByParentId(sourceList, item.getId()));
}
targetList.add(item);
}
}
//转换为目标类型
List<T> tList = new ArrayList<>();
for (TreeItemInterface ti : targetList) {
tList.add((T) ti);
}
return tList;
}
}