java实现留言回复功能(可以无限回复递归)

今天遇到一个项目上的需求,需要在留言反馈里加一个回复的功能,刚开始想的有些复杂,但是最后捋了一下思路用了将近两个小时终于写出来了。其实就只需要把所有数据查询出来一次,然后做一次递归操作。

首先看实体类
反馈留言:FeedbackMessage(BaseDomain只是一个基础的实体类而已)

@Entity
@Getter
@Setter
@Accessors(chain = true)
@Table(name = "jl_supervision_proc_feedback")
public class FeedbackMessage extends BaseDomain {private static final long serialVersionUID = -8595377684297725344L;@ApiModelProperty("反馈情况")@Lob@Column(columnDefinition = "TEXT")private String info;/*** 文件id*/@Column(name = "fileIds")@ApiModelProperty("对应文件id,用&&&分割")private String fileIds;@ApiModelProperty("父类回复id 一级可以不传")private Long parentId;
}

响应类:FeedbackMessageResponse

@ApiModel
@Data
@Accessors(chain = true)
public class FeedbackMessageResponse {@ApiModelProperty("反馈留言id")private Long id;@ApiModelProperty("反馈留言内容")private String info;@ApiModelProperty("文件名:文件地址")private List<Map<String,String>> listMap = new ArrayList<>();@ApiModelProperty("修改时间")@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")private Date updateTime;@ApiModelProperty(value = "操作人、当前用户id")private Long operatorId;@ApiModelProperty(value = "操作人名称")private String operatorName;@ApiModelProperty(value = "父类回复id")private Long parentId;@ApiModelProperty("子节点")List<FeedbackMessageResponse> childen = new ArrayList<>();
}

与之前类的区别可能只是加了一行代码

 @ApiModelProperty("子节点")List<FeedbackMessageResponse> childen = new ArrayList<>();

只贴关键代码了,其他的业务逻辑可以按自己的业务添加

         List<FeedbackMessageResponse> treeResponseArrayList = new ArrayList<>();List<FeedbackMessageResponse> responses;// 这里是jpa的分页条件查询page = feedbackMessageRepository.findAll(specification, pageRequest).map(this::getBean);// 遍历获得所有数据page.getContent().forEach(o -> {FeedbackMessageResponse treeResponse = new FeedbackMessageResponse();ObjectUtil.copyNotNullBean(o,treeResponse);treeResponseArrayList.add(treeResponse);});responses = this.getTreeReponse(treeResponseArrayList);

封装树形结构:getTreeReponse

 /*** 封装树状图结构* @param treeResponseArrayList 所有记录* @return 封装后结果*/private List<FeedbackMessageResponse> getTreeReponse(List<FeedbackMessageResponse> treeResponseArrayList) {// 创建根、非根节点集合List<FeedbackMessageResponse> listParentRecord = new ArrayList<>();List<FeedbackMessageResponse> listNotParentRecord = new ArrayList<>();// 查询并添加根、非根节点treeResponseArrayList.forEach(o -> {if (o.getParentId() == null){// 根节点listParentRecord.add(o);}else {// 非根节点listNotParentRecord.add(o);}});// 递归查询所有子节点if (CollectionUtil.isNotEmpty(listParentRecord)){listParentRecord.forEach(parent -> {parent.setChilden(this.getChilden(parent.getId(),listNotParentRecord));});}return listParentRecord;}

递归查询所有子节点:getChilden

 /*** 递归查询所有子节点* @param parentId 根节点id* @param childenList 非根节点集合* @return 所有子节点*/private List<FeedbackMessageResponse> getChilden(Long parentId, List<FeedbackMessageResponse> childenList) {// 创建根、非根节点集合List<FeedbackMessageResponse> listParentRecord = new ArrayList<>();List<FeedbackMessageResponse> listNotParentRecord = new ArrayList<>();// 遍历childenList找出所有根、非根节点childenList.forEach(record -> {if (ObjectUtil.equal(parentId,record.getParentId())){listParentRecord.add(record);}else {listNotParentRecord.add(record);}});// 继续查询子节点if (CollectionUtil.isNotEmpty(listParentRecord)){listParentRecord.forEach(record -> record.setChilden(this.getChilden(record.getId(),listNotParentRecord)));}return listParentRecord;}

注释应该写的很详细了,大家仔细看一下应该都可以看懂的。
这是在实际项目中使用的哦,所以代码肯定是对的哈。
如果有不懂的也欢迎提问哦。

java实现留言回复功能(可以无限回复递归)相关推荐

  1. java对一个课程树进行无限极递归获取其中的某一个值

    先看看List < Object>数据 "courseNode": [{"_id": NumberLong("1615240830262& ...

  2. java留言并后台回复_基于SSM的文章管理系统(增加留言回复功能)

    食用说明 这是本人初学SSM的时候写的,旨在学习SSM框架使用,在达到学习目的的前提下实现部分功能,项目本身大体没有问题,如果细节部分你遇到了问题还请自行完善下 本人不会再维护此项目 本人不会再维护此 ...

  3. 基于SSM框架的文章管理系统(增加留言回复功能)

    一个简单的文章管理系统(增加留言回复功能) 简单使用百度富文本实现了文章管理的功能,增加了留言回复功能,其实这个小项目只是为了测试怎样实现留言回复功能而提取出来的,并不是很完善,主要实现了对文章的增删 ...

  4. 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能

    微信公众平台开发中使用Java如何实现一个消息回复功能 发布时间:2020-11-17 16:11:11 来源:亿速云 阅读:82 作者:Leah 本篇文章给大家分享的是有关微信公众平台开发中使用Ja ...

  5. 基于MySQL的留言回复功能(SSM框架实现)

    使用SSM框架实现留言回复功能(基于MySQL)之前一直纠结这个留言回复功能怎么写,在网上也没有找到一个明确的案例,这里我简单介绍一下我写的基于MySQL的留言回复功能. 注意:首先使用MySQL数据 ...

  6. JSP+SQL实现留言功能(含留言回复功能),附源码

    注:新版本源码在另一篇博客中:点击跳转 一.开发环境 MyEclipse8.6+WampServer+MySQL 这里用到Apache,是因为我用了他来连接数据库. 项目中还用到了一个jar包,mys ...

  7. 【JavaWeb】如何实现支持回复功能的留言板

    hello大家好,我是卷卷毛,我又回来了 这次给大家带来一个支持回复功能的留言板的设计方案,这个留言板现在就正运行在我的个人博客中,它支持简单的留言.回复功能,先来看一下效果图: 欢迎大家来留言板逛逛 ...

  8. Java单表实现评论回复功能

    Java单表实现评论回复功能 1.简介 2.功能实现图 3.数据库设计 4.实体类 5.实现思路 6.功能实现 6.1 Sql入手 6.2 业务实现 7.前端实现 8.最终成果 1.简介 最近在写毕业 ...

  9. springmvc实现留言回复功能

    很多网站都提供了留言,评论回复功能,而我做的一个分享圈项目同样要实现的功能. 思路: 1.可以只创建一个留言表,用户的留言和回复功能都插进这张表,这样建议在网页显示效果用爬楼形式,因为数据都在一张表, ...

最新文章

  1. LibreOffice使用笔记
  2. 最值得一看的几条简单的谷歌 Google 搜索技巧!
  3. 数据对象类代码的生成小工具
  4. SciPy和Numpy处理能力
  5. php接收不到ios值,php设置标签后,ios收不到,安卓可以收到
  6. 遇到异常:这可能是由某个扩展导致的
  7. 百度地图mysql打点_关于百度地图连接MYSQL的问题,谢谢啦!
  8. 【读书笔记】实战Java高并发程序设计(第2版)读书笔记
  9. GridBagLayout用法
  10. 【网络安全学习笔记3】侧信道攻击以及技术概览
  11. 2020年高压电工模拟考试题库及高压电工作业模拟考试
  12. Quirks模式与标准模式
  13. React Native导航器之react-navigation使用
  14. IDEA的配置设置及使用
  15. OTDR光时域反射仪 知识总结
  16. 基于linux用C语言编写的局域网通信软件(在ubuntu上正常运行)
  17. 输入两个正整数m和n,输出m到n之间每个整数的自然对数
  18. 快速搭建koa2手脚架指南
  19. CSS 实现内阴影的方法
  20. Connection must be valid and open.

热门文章

  1. 程序员最后一款笔记软件:Notion
  2. RSS订阅与RSS阅读的常见问题解答
  3. Vs Code Remote 远程开发与调试-软件使用
  4. 20.driverbase-CONTAINING_RECODE和双向链表
  5. 『Javascript基础重点』13.dom的应用
  6. 研发效能管理如何建立闭环?
  7. Stream流学习(二)map方法
  8. 『实践』Yalmip建模+Cplex类求解
  9. [luogu3939][数颜色]
  10. Windows电脑无法识别USB设备怎么办?