java 树怎么弄

从此安心潜水被占用 2012-12-28 03:01:34
我的数据库主要就2个字段,一个是serviceId,一个是parentCatalogId,parentCatalogId为空表示该serviceId为根目录,不为空,表示该serviceId的上层目录为parentCatalogId所对应的值,动态展示我做出来了,但是头让我做个一次显示所有目录的出来,有点搞不定了,来求教
...全文
640 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这还是最后用了递归做的,结果如下:[[parentCatalogId=null, serviceId=1, list=[[parentCatalogId=1, serviceId=3, list=[[parentCatalogId=3, serviceId=5]]], [parentCatalogId=1, serviceId=4]]], [parentCatalogId=null, serviceId=2]] 做事做出来了,不过还是不太懂,慢慢研究下
  • 打赏
  • 举报
回复
public static List<Map<String, Object>> getCatalog(List<Map<String, Object>> list, String rootId) { List<Map<String, Object>> result = FastList.newInstance(); for (Map<String, Object> map : list) { String parentCatalogId = (String) map.get("parentCatalogId"); if ((UtilValidate.isEmpty(rootId) && UtilValidate.isEmpty(parentCatalogId)) || rootId.equals(parentCatalogId)) { result.add(map); List<Map<String, Object>> subList = getCatalog(list, (String) map.get("serviceId")); if (UtilValidate.isNotEmpty(subList)) { map.put("list", subList); } } } return result; }
  • 打赏
  • 举报
回复
今天问了下老大,让我用递归,不过递归不太懂,在学习中……
a8509190 2012-12-29
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
引用 28 楼 xtfgy2012 的回复:
Java code?123456789101112131415161718192021222324class User { private String catalogId; private String serviceId; private String parentId; public String getCatalogId() { ……
然后用递归就可以展示了。
GLF 2012-12-29
  • 打赏
  • 举报
回复
定义个类:节点ID,父节点ID,是否有孩子节点等等信息。根据25楼sql查出来就可以了
疯狂的球球球 2012-12-29
  • 打赏
  • 举报
回复
递归试试看看
  • 打赏
  • 举报
回复
json 递归
  • 打赏
  • 举报
回复
引用 28 楼 xtfgy2012 的回复:
Java code?123456789101112131415161718192021222324class User { private String catalogId; private String serviceId; private String parentId; public String getCatalogId() { ……
javaBean和用map感觉差不多吧……或者是我本身javaBean理解的不够,去查查javaBean先
xtfgy2012 2012-12-28
  • 打赏
  • 举报
回复
class User {
	private String catalogId;
	private String serviceId;
	private String parentId;
	
	public String getCatalogId() {
		return catalogId;
	}
	public void setCatalogId(String catalogId) {
		this.catalogId = catalogId;
	}
	public String getServiceId() {
		return serviceId;
	}
	public void setServiceId(String serviceId) {
		this.serviceId = serviceId;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
}
javaBean这样就可以了 然后你在循环取数据的代码里,例如(伪代码) List list = new ArrayList(); for(循环记录集) { String catalogId = rs.getString("catalog_ID"); String catalogId = rs.getString("serviceId"); String catalogId = rs.getString("parentId"); //进行设值 User user = new User(); user.setCatalogId(catalogId ) .... .... list.add(user); } setAttribute("treeData",list);
  • 打赏
  • 举报
回复
引用 25 楼 gukuitian 的回复:
引用 4 楼 ggcaozheng 的回复:这个是我的表结构 是oracle吧, 小技巧 SQL code?1 select id,parent_id,LEVEL from table start with id='根结点ID' connect by prior id=parent_id
不是,是DB2……
  • 打赏
  • 举报
回复
引用 23 楼 xtfgy2012 的回复:
引用 20 楼 jerrey17 的回复:你可以用递归来实现这种功能 比如有: ID PID leaf 1 0 0 2 1 1 3 1 1 4 0 0 5 4 1 PID为父子节点,PID=0则为父级任务。leaf是叶子节点,如果叶……
4楼图片这种应该本身也是树结构吧,只是不知道怎么组织数据,方便前台使用来展现
gukuitian 2012-12-28
  • 打赏
  • 举报
回复
引用 4 楼 ggcaozheng 的回复:
这个是我的表结构
是oracle吧, 小技巧
 select id,parent_id,LEVEL  from table start with id='根结点ID' connect by prior id=parent_id  
xtfgy2012 2012-12-28
  • 打赏
  • 举报
回复
引用 22 楼 lkclkc88 的回复:
public class User{ private User(int id){ this.id = id; } private int id; private List<User> children; .... } User L1 = new User(1); //头 User L2 = new User(2); List list……
NO,你完全搞错javaBean了
xtfgy2012 2012-12-28
  • 打赏
  • 举报
回复
引用 20 楼 jerrey17 的回复:
你可以用递归来实现这种功能 比如有: ID PID leaf 1 0 0 2 1 1 3 1 1 4 0 0 5 4 1 PID为父子节点,PID=0则为父级任务。leaf是叶子节点,如果叶子节点为true(1),那么本节点就没有孩……
他的数据本身就是一颗树,展现一颗树和怎么存放一颗树完全是两回事,如果数据本身就是一颗 树,就算你存放的顺序乱七八糟,也可以在展现时展现成一颗树,我觉得楼主没搞明白这个道理 展现的时候只要找到所有的根,然后一次添加每个根下的直接后继子数据就可以了,循环如此 真的和数据存成什么样子没关系
  • 打赏
  • 举报
回复
public class User{ private User(int id){ this.id = id; } private int id; private List<User> children; .... } User L1 = new User(1); //头 User L2 = new User(2); List list1 = new ArrayList(1); list1.add(L2); L1.setChildren(list1); //第二层 User L3 = new User(3); List list2 = new ArrayList(2); List2.add(L3); L2.setChildren(list2); //第三层 .....
  • 打赏
  • 举报
回复
引用 20 楼 jerrey17 的回复:
你可以用递归来实现这种功能 比如有: ID PID leaf 1 0 0 2 1 1 3 1 1 4 0 0 5 4 1 PID为父子节点,PID=0则为父级任务。leaf是叶子节点,如果叶子节点为true(1),那么本节点就没有孩……
貌似你这个看起来比较87,我本来是用的差不多的思路,结果没整出来……
jerrey17 2012-12-28
  • 打赏
  • 举报
回复
你可以用递归来实现这种功能 比如有: ID PID leaf 1 0 0 2 1 1 3 1 1 4 0 0 5 4 1 PID为父子节点,PID=0则为父级任务。leaf是叶子节点,如果叶子节点为true(1),那么本节点就没有孩子了,如果叶子节点为false(0),说明本节点下面还有孩子。 上面的数据就是一棵树 展现形式为: --1 ----2 ----3 --4 ----5 定义一个方法,查询出所有的父ID,再调用自身,查询自己下面的子ID,直到叶子节点为0。一个递归就可以完成一棵树了。
  • 打赏
  • 举报
回复
引用 18 楼 gukuitian 的回复:
引用 13 楼 ggcaozheng 的回复:引用 11 楼 xtfgy2012 的回复:你问的问题就好像一个人到了饭馆然后和别人说:我要吃饭,然后就坐那里等着别人上饭了 小学语文是数学老师教的……我是想说如果别人访问一次,我直接把目录全部显示出来,就像这样,而不是这种效果,表述不够明确,支持第一种图片的后台应该提供什么样的数据结构才能在前台显示出第一种效果呢 还是没……
准备数据
gukuitian 2012-12-28
  • 打赏
  • 举报
回复
引用 13 楼 ggcaozheng 的回复:
引用 11 楼 xtfgy2012 的回复:你问的问题就好像一个人到了饭馆然后和别人说:我要吃饭,然后就坐那里等着别人上饭了 小学语文是数学老师教的……我是想说如果别人访问一次,我直接把目录全部显示出来,就像这样,而不是这种效果,表述不够明确,支持第一种图片的后台应该提供什么样的数据结构才能在前台显示出第一种效果呢
还是没看明白你的问题重点, 你是准备数据没有,还是不知道如何展开显示(这是前台的事),
加载更多回复(17)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧