java不使用递归 将一个有层级结构的集合还原成一棵树
来源:互联网 发布:风险矩阵图 编辑:程序博客网 时间:2024/06/06 17:44
现有一个集合的对象 每个对象有父节点的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);
}
}
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);
}
}
就不一一解释代码的意思了 如需知道思路可以留言邮箱
阅读全文
0 0
- java不使用递归 将一个有层级结构的集合还原成一棵树
- 递归遍历View的层级结构
- java、js中实现无限层级的树形结构(类似递归)
- Java、JS中实现无限层级的树形结构(类似递归)
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- 有个一个WINCE 6.0系统的触摸屏 重启后系统就会被还原,如何能让它不还原?
- 《Java程序》使用递归调用的方法,写一个能够将字符串倒叙输出的函数
- 存储器的层级结构
- 目录的层级结构
- 程序员的层级结构
- Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级
- java学习笔记 使用递归 将文件目录树形结构输出,递归删除目录 文件夹。
- 一个适用于层级目录结构的makefile模版
- 一个适用于层级目录结构的makefile模版
- (礼拜二log)java 构建层级关系的递归算法
- 使用递归求出一个集合的所有子集
- 如何将一个发布的Java项目还原成Java开发项目
- 利用递归形成一个层级树
- PHP学习(2)-超全局变量
- 使用CLion搭建Qt开发环境。继续写deepin-menu的内容
- 二. Zookeeper客户端命令
- 知识系统的梳理
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
- java不使用递归 将一个有层级结构的集合还原成一棵树
- 百度地图:为标记添加点击事件显示标注
- easyUI简易进度条
- ORA-01017 invalid username/password;logon denied" (密码丢失解决方案)
- java 多线程 避免死锁 哲学家就餐问题
- 多线程FMDB操作sqlite时候出现 EXC_BAD_ACCESS
- EasyCamera开源摄像机接入海康威视摄像机PS流转ES流
- jQuery部分事件
- 关于cypress3014开发uvc+vitual com组合设备的体会