其中Channel.java是栏目结构,ChannelDto是我自己封装的返回给前端的数据,可以根据自己的来

这个的逻辑就是双重循环遍历每个类别,然后判断如果当前类别是其他类别的父级,那么就把其他类别的数据数据放到当前栏目的子集中

如果不想显示所有的栏目 可以修改这个判断 就会只展示这个栏目下的所有数据

channel.getPid().toString().equals("0")

这个直接查询所有栏目数据传进去即可

List<Channel> list

代码

public List<ChannelDto> parseMenuTree(List<Channel> list) {
List<ChannelDto> result = new ArrayList<ChannelDto>(); //1.获取第一个节点
for (Channel channel : list) {
if (channel.getPid().toString().equals("0")) {
ChannelDto dto = new ChannelDto();
dto.setId(channel.getId().intValue())
.setChannelTitle(channel.getChannelTitle());
result.add(dto);
}
} //2.获取递归子节点
for (ChannelDto parent : result) {
parent = menuChild(parent, list);
}
return result;
} public ChannelDto menuChild(ChannelDto parent, List<Channel> list) {
for (Channel channel : list) {
if (parent.getId().equals(channel.getPid().intValue())) {
ChannelDto dto = new ChannelDto();
dto.setId(channel.getId().intValue())
.setChannelTitle(channel.getChannelTitle());
if (parent.getChildList() == null) {
parent.setChildList(new ArrayList<ChannelDto>());
}
parent.getChildList().add(dto);
dto = menuChild(dto, list);
}
}
return parent;
}

id:当前栏目的ID

pid:当前栏目的父级ID

childList:当前栏目的子集

最终展示成json是这个样子

    {
"id": 14,
"channelTitle": "一级分类",
"childList": [
{
"id": 15,
"channelTitle": "二级分类",
"childList": [
{
"id": 16,
"channelTitle": "三级分类"
},
{
"id": 18,
"channelTitle": "三级其他"
}
]
},
{
"id": 19,
"channelTitle": "其他二级1"
}
]
}

JAVA实现查询栏目、类别(菜单)返回树结构(递归)的更多相关文章

  1. JAVA查询类别(菜单)下的所有子类别(递归)

    /** * 获取父类别下面的所有子类别 * @return List<StoreGoodsCate> 返回当前类别下的所有子类别集合 */ public List<StoreGood ...

  2. java查询几个菜单下的所有下级菜单

    需求: 假如有几个一级菜单,一级菜单下面有几个二级菜单,二级菜单下又还有三级菜单.现在要求一级菜单里面的几个设置为无效,将不显示在前端.现在需要的是查询出一级菜单下面所有的菜单,包括二级,三级菜单 原 ...

  3. java servlet调用带有多个返回结果集的存储过程

    一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...

  4. Mybatis按SQL查询字段的顺序返回查询结果

    在SpringMVC+Mybatis的开发过程中,可以通过指定resultType="hashmap"来获得查询结果,但其输出是没有顺序的.如果要按照SQL查询字段的顺序返回查询结 ...

  5. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  6. 案例19-页面使用ajax显示类别菜单

    1 版本一 版本只能在首页显示类别,当切换到了其它页面就不会显示 1 web层IndexServlet代码 package www.test.web.servlet; import java.io.I ...

  7. 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。

    查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:

  8. Java线程:新特征-有返回值的线程

    http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...

  9. java使用Filter过滤器对Response返回值进行修改

    转:java使用Filter过滤器对Response返回值进行修改 练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过 ...

随机推荐

  1. Codeforces 1063F - String Journey(后缀数组+线段树+dp)

    Codeforces 题面传送门 & 洛谷题面传送门 神仙题,做了我整整 2.5h,写篇题解纪念下逝去的中午 后排膜拜 1 年前就独立切掉此题的 ymx,我在 2021 年的第 5270 个小 ...

  2. Codeforces 650D - Zip-line(树状数组)

    Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...

  3. CentOS6.9安装python3

    安装依赖包: yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel w ...

  4. C语言按行读入文件

    getline() 函数无论一行多长,动态分配内存读入行 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <s ...

  5. SQL-关联表查询(连表查询)

    0.例如:select * from T1,T2     where T1.a=T2.a 1.连表查询 <=> join(inner join)内连接查询 数据源: Persion表:  ...

  6. 学习java 7.1

    学习内容:数组的定义格式:int[ ] arr;  int arr[ ]; 数组的动态初始化:int[ ] arr = new int[ ];静态初始化:int[ ] arr = new int[ ] ...

  7. acute, adapt

    acute In Euclidean [欧几里得] geometry, an angle is the figure [图形] formed by two rays, called the sides ...

  8. keil 生成 bin 文件 gd32为例

    fromelf --bin --output .\update\GD32F4xZ.bin .\Output\GD32450Z_EVAL.axf代表使用的keil内的工具代表输出公式,..表示: 输出 ...

  9. 随录、EJB和JTA

    说道JTA(Java Transction Api),即事务的一种. 事务:说白了就是一组原子操作,是为了保证数据的安全性. 它,分为三类:JDBC事务,JTA事务,还有容器事务. JDBC是由Con ...

  10. IDE搬进浏览器里——JetBrains Projector

    发展 提起 JetBrains,你会想到什么?各路强大的 IDE,比如 Android Studio.IDEA.WebStorm--这些对于开发者来说耳熟能详的产品都出自这家公司,这些 IDE 的功能 ...