Java递归实现评论多级回复
最近工作需要做一个评论功能,除了展示评论之外,还需要展示评论回复,评论的回复的回复,这里就用到了递归实现评论的多级回复。
评论实体
数据库存储字段: id 评论id、parent_id 回复评论id、message 消息。其中如果评论不是回复评论,parent_id 为-1。
创建一个评论实体 Comment:
public class Comment {
/**
* id
*/
private Integer id;
/**
* 父类id
*/
private Integer parentId;
/**
* 消息
*/
private String message;
}
查询到所有的评论数据。方便展示树形数据,对Comment添加回复列表
List<ViewComment> children
ViewComment结构如下:
// 展示树形数据
public class ViewComment {
/**
* id
*/
private Integer id;
/**
* 父类id
*/
private Integer parentId;
/**
* 消息
*/
private String message;
/**
* 回复列表
*/
private List<ViewComment> children = new ArrayList<>();
}
添加非回复评论
非回复评论的parent_id为-1,先找到非回复评论:
List<ViewComment> viewCommentList = new ArrayList<>();
// 添加模拟数据
Comment comment1 = new Comment(1,-1,"留言1");
Comment comment2 = new Comment(2,-1,"留言2");
Comment comment3 = new Comment(3,1,"留言3,回复留言1");
Comment comment4 = new Comment(4,1,"留言4,回复留言1");
Comment comment5 = new Comment(5,2,"留言5,回复留言2");
Comment comment6 = new Comment(6,3,"留言6,回复留言3");
//添加非回复评论
for (Comment comment : commentList) {
if (comment.getParentId() == -1) {
ViewComment viewComment = new ViewComment();
BeanUtils.copyProperties(comment,viewComment);
viewCommentList.add(viewComment);
}
}
递归添加回复评论
遍历每条非回复评论,递归添加回复评论:
for(ViewComment viewComment : viewCommentList) {
add(viewComment,commentList);
}
private void add(ViewComment rootViewComment, List<Comment> commentList) {
for (Comment comment : commentList) {
// 找到匹配的 parentId
if (rootViewComment.getId().equals(comment.getParentId())) {
ViewComment viewComment = new ViewComment();
BeanUtils.copyProperties(comment,viewComment);
rootViewComment.getChildren().add(viewComment);
//递归调用
add(viewComment,commentList);
}
}
}
- 遍历每条非回复评论。
- 非回复评论
id匹配到评论的parentId,添加到该评论的children列表中。 - 递归调用。
结果展示:

github 源码
https://github.com/jeremylai7/java-codes/tree/master/basis/src/main/java/recurve
Java递归实现评论多级回复的更多相关文章
- java中递归实现复制多级文件夹
常见的流的用法 递归实现复制多级文件夹 FileInputStream & FileOutputStream String content = null;//用来储存解码后的byte数组 in ...
- php无限级分类实战——评论及回复功能
经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很 ...
- myql 查询树形表结果:说说、说说的述评、评论的回复
myql 查询树形表结果:说说.说说的评论.评论的回复 有三张表关联表: 用户的说说表(ixt_customer_note) 说说的评论表(ixt_customer_note_comment) 评论的 ...
- Java递归列出目录下全部文件
Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...
- 类似于qq空间类型的评论和回复
最近学习thinkphp,做了一个博客系统,其中感觉实现一个类似于qq空间的评论和回复功能比较复杂,所以把这次的经历记录下来,与大家共勉,具体的方法就不说了,在这里分享一下思路. 目标就是这种,关键是 ...
- PHP实现简单的评论与回复功能还有删除信息
我们首先先看一下功能 上面黑色的是评论的下面红色的字体是回复的 再来看看怎么实现的 1.发布评论 <form action="pinglunchili.php" method ...
- Java 递归调用 recursive 给一个参数 返回一大堆
需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...
- JAVA 递归实现从n个数中选取m个数的所有组合
这周Java课程有个小作业:Java递归实现从n个数中选取m个数的所有组合 代码如下: //其中 n 取 1,2,3,4,5 五个数, m 取 3 package javaText; public c ...
- Java高并发--CPU多级缓存与Java内存模型
Java高并发--CPU多级缓存与Java内存模型 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 CPU多级缓存 为什么需要CPU缓存:CPU的频率太快,以至于主存跟 ...
随机推荐
- JavaScript学习总结4-规范
昨天学习了JS的严格检查模式,今天做一点补充 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 & ...
- python 面试题汇总
1丶元组(list)和列表(tuple)的区别: 一:共同点: ①: 可以放置任意数据类型的有序集合,都是可以存放数字,字符串,对象等. ②:都支持 负索引,切片,随意嵌套等操作 二:不同点: ①: ...
- Java语言学习day17--7月23日
1.面向对象思想2.类与对象的关系3.局部变量和成员变量的关系4.封装思想5.private,this关键字6.随机点名器 ###01面向对象和面向过程的思想 * A: 面向过程与面向对象都是我们编程 ...
- 在 WinForms 项目中使用全局快捷键
借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Windows API 打交道.本文就交你如何使用 Win ...
- box-shadow-阴影,你真的懂吗
大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...
- mosquitto服务器的安装以及mqtt.fx软件的使用
一.MQTT描述 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议,由 IB ...
- linux在图形界面一登录就自动闪退
今天一登录linux图形界面就自动退出了,又退到了登录界面了,密码是正确的. 解决方法如下: 1. 先按 Ctrl + Alt + F1,进入 命令行模式. 2. 在命令行里,输入用户名密码正常登录. ...
- ASP.NET Web 应用 Docker踩坑历程
听说Docker这玩意挺长时间了,新建Web应用的时候,也注意到有个启用Docker的选项. 前两天扫了一眼<[大话云原生]煮饺子与docker.kubernetes之间的关系>,觉得有点 ...
- 在centos 7 中 conda 环境和Python2.7 中安装远程jupyter
折腾了半天,为了能够方便学习TensorFlow,搞了远程的jupyter,方便在本地使用它,今天填了不少坑. 装完后截图: 下面是一些步骤: 检查 Python 环境 CentOS 7.2 中默认集 ...
- 浅谈 Linux IO
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 来源于:360云计算 1 前言 Linux IO是文件存储的基础.本文参考了网上博主的一些文章,主要总结了LinuxIO的基 ...