java不使用递归 将一个有层级结构的集合还原成一棵树

现有一个集合的对象  每个对象有父节点的id和自己的id

不适用递归把这个集合还原成一棵树

可以用双层for循环 并且合理使用continue和break


private void buildTree(TreeItem<FuncModule> root, String rootId) { 
for (TreeItem<FuncModule> itemI : mTreeList.getObList()) { 
String idI = itemI.getValue().getId(); 
String parentIdI = itemI.getValue().getParentId(); 
if (idI.isEmpty()) { 
continue; 

 
if (parentIdI.equals(rootId)) { 
root.getChildren().add(itemI); 
continue; 

 
for (TreeItem<FuncModule> itemJ : mTreeList.getObList()) { 
String idJ = itemJ.getValue().getId(); 
if (idJ.equals(parentIdI)) { 
itemJ.getChildren().add(itemI); 
break; 



}


还有一种更可怕的方法 遍历一次就还原一棵树了 这里用到了2个map

 TreeItem<Party>  root=new  TreeItem<Party>(p1);   
   
instTreeView.setRoot(root);   
root.setExpanded(true);    
Map<TreeItem<Party>,ObservableList<TreeItem<Party>>>  treeListMap=new  HashMap<TreeItem<Party>,ObservableList<TreeItem<Party>>>();   
Map<String,TreeItem<Party>>  treeMap=new  HashMap<String,TreeItem<Party>>();   
treeMap.put(p1.getId(),  root);   
   
for(Party  party:allParty){   
if(!"1".equals(party.getId())){   
TreeItem<Party>  partyItem=new  TreeItem<Party>(party);   
treeMap.put(party.getId(),  partyItem);   
}    
}   
   
System.out.println(System.currentTimeMillis());   
   
for(Party  party:allParty){   
if(treeListMap.get(treeMap.get(party.getId()))  ==  null     
&&  treeMap.get(party.getParentId())  !=  null){   
   
ObservableList<TreeItem<Party>>  list=treeMap.get(party.getParentId()).getChildren();   
TreeItem<Party>  pItem=treeMap.get(party.getId());   
list.add(pItem);   
treeListMap.put(treeMap.get(party.getParentId()),list);   
   
}else  if(treeListMap.get(treeMap.get(party.getId()))  !=  null       
&&  treeMap.get(party.getParentId())  !=  null     
&&  treeListMap.get(treeMap.get(party.getParentId()))  ==  null){   
   
ObservableList<TreeItem<Party>>  list=treeMap.get(party.getParentId()).getChildren();   
TreeItem<Party>  pItem=treeMap.get(party.getId());   
list.add(pItem);   
treeListMap.put(treeMap.get(party.getParentId()),list);    
}   
}

就不一一解释代码的意思了 如需知道思路可以留言邮箱

猜你喜欢

转载自blog.csdn.net/phcgld1314/article/details/78672266
今日推荐