现有一个集合的对象 每个对象有父节点的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
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);
}
}
就不一一解释代码的意思了 如需知道思路可以留言邮箱