/*** 樹形表格工具類
*
*@authoryanggb*/
public classTreeTableUtil {/*** 把列表轉換為樹結構
*
java構建是什么意思。*@paramoriginalList 原始list數據
*@paramidFieldName 作為唯一標示的字段名稱
*@parampidFieldName 父節點標識字段名
*@paramchildrenFieldName 子節點(列表)標識字段名
*@return樹結構列表*/
public static List list2TreeList(ListoriginalList, String idFieldName, String pidFieldName,
Java編程 自定義treenode,String childrenFieldName) {//獲取根節點,即找出父節點為空的對象
List rootNodeList = new ArrayList<>();for(T t : originalList) {
String parentId= null;try{
parentId=BeanUtils.getProperty(t, pidFieldName);
}catch (IllegalAccessException | InvocationTargetException |NoSuchMethodException e) {
e.printStackTrace();
java項目構建。}if(StringUtils.isBlank(parentId)) {
rootNodeList.add(0, t);
}
}//將根節點從原始list移除,減少下次處理數據
originalList.removeAll(rootNodeList);//遞歸封裝樹
try{
java構建路徑?packTree(rootNodeList, originalList, idFieldName, pidFieldName, childrenFieldName);
}catch(Exception e) {
e.printStackTrace();
}returnrootNodeList;
}/*** 封裝樹(向下遞歸)
*
java遞歸樹。*@paramparentNodeList 要封裝為樹的父節點對象集合
*@paramoriginalList 原始list數據
*@paramkeyName 作為唯一標示的字段名稱
*@parampidFieldName 父節點標識字段名
*@paramchildrenFieldName 子節點(列表)標識字段名*/
private static void packTree(List parentNodeList, ListoriginalList, String keyName,
java實現樹。String pidFieldName, String childrenFieldName)throwsException {for(T parentNode : parentNodeList) {//找到當前父節點的子節點列表
List children =packChildren(parentNode, originalList, keyName, pidFieldName, childrenFieldName);if(children.isEmpty()) {continue;
}//將當前父節點的子節點從原始list移除,減少下次處理數據
originalList.removeAll(children);//開始下次遞歸
packTree(children, originalList, keyName, pidFieldName, childrenFieldName);
}
java遞歸生成樹結構,}/*** 封裝子對象
*
*@paramparentNode 父節點對象
*@paramoriginalList 原始list數據
*@paramkeyName 作為唯一標示的字段名稱
*@parampidFieldName 父節點標識字段名
java構建樹形結構。*@paramchildrenFieldName 子節點(列表)標識字段名*/
private static List packChildren(T parentNode, ListoriginalList, String keyName, String pidFieldName,
String childrenFieldName)throwsException {//找到當前父節點下的子節點列表
List childNodeList = new ArrayList<>();
String parentId=BeanUtils.getProperty(parentNode, keyName);for(T t : originalList) {
String childNodeParentId=BeanUtils.getProperty(t, pidFieldName);if(parentId.equals(childNodeParentId)) {
java構建路徑順序?childNodeList.add(t);
}
}//將當前父節點下的子節點列表寫入到當前父節點下(給子節點列表字段賦值)
if (!childNodeList.isEmpty()) {
FieldUtils.writeDeclaredField(parentNode, childrenFieldName, childNodeList,true);
}returnchildNodeList;
java構建。}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态