java实现留言回复功能(可以无限回复递归)
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实现留言回复功能(可以无限回复递归)相关推荐
- java对一个课程树进行无限极递归获取其中的某一个值
先看看List < Object>数据 "courseNode": [{"_id": NumberLong("1615240830262& ...
- java留言并后台回复_基于SSM的文章管理系统(增加留言回复功能)
食用说明 这是本人初学SSM的时候写的,旨在学习SSM框架使用,在达到学习目的的前提下实现部分功能,项目本身大体没有问题,如果细节部分你遇到了问题还请自行完善下 本人不会再维护此项目 本人不会再维护此 ...
- 基于SSM框架的文章管理系统(增加留言回复功能)
一个简单的文章管理系统(增加留言回复功能) 简单使用百度富文本实现了文章管理的功能,增加了留言回复功能,其实这个小项目只是为了测试怎样实现留言回复功能而提取出来的,并不是很完善,主要实现了对文章的增删 ...
- 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能
微信公众平台开发中使用Java如何实现一个消息回复功能 发布时间:2020-11-17 16:11:11 来源:亿速云 阅读:82 作者:Leah 本篇文章给大家分享的是有关微信公众平台开发中使用Ja ...
- 基于MySQL的留言回复功能(SSM框架实现)
使用SSM框架实现留言回复功能(基于MySQL)之前一直纠结这个留言回复功能怎么写,在网上也没有找到一个明确的案例,这里我简单介绍一下我写的基于MySQL的留言回复功能. 注意:首先使用MySQL数据 ...
- JSP+SQL实现留言功能(含留言回复功能),附源码
注:新版本源码在另一篇博客中:点击跳转 一.开发环境 MyEclipse8.6+WampServer+MySQL 这里用到Apache,是因为我用了他来连接数据库. 项目中还用到了一个jar包,mys ...
- 【JavaWeb】如何实现支持回复功能的留言板
hello大家好,我是卷卷毛,我又回来了 这次给大家带来一个支持回复功能的留言板的设计方案,这个留言板现在就正运行在我的个人博客中,它支持简单的留言.回复功能,先来看一下效果图: 欢迎大家来留言板逛逛 ...
- Java单表实现评论回复功能
Java单表实现评论回复功能 1.简介 2.功能实现图 3.数据库设计 4.实体类 5.实现思路 6.功能实现 6.1 Sql入手 6.2 业务实现 7.前端实现 8.最终成果 1.简介 最近在写毕业 ...
- springmvc实现留言回复功能
很多网站都提供了留言,评论回复功能,而我做的一个分享圈项目同样要实现的功能. 思路: 1.可以只创建一个留言表,用户的留言和回复功能都插进这张表,这样建议在网页显示效果用爬楼形式,因为数据都在一张表, ...
最新文章
- LibreOffice使用笔记
- 最值得一看的几条简单的谷歌 Google 搜索技巧!
- 数据对象类代码的生成小工具
- SciPy和Numpy处理能力
- php接收不到ios值,php设置标签后,ios收不到,安卓可以收到
- 遇到异常:这可能是由某个扩展导致的
- 百度地图mysql打点_关于百度地图连接MYSQL的问题,谢谢啦!
- 【读书笔记】实战Java高并发程序设计(第2版)读书笔记
- GridBagLayout用法
- 【网络安全学习笔记3】侧信道攻击以及技术概览
- 2020年高压电工模拟考试题库及高压电工作业模拟考试
- Quirks模式与标准模式
- React Native导航器之react-navigation使用
- IDEA的配置设置及使用
- OTDR光时域反射仪 知识总结
- 基于linux用C语言编写的局域网通信软件(在ubuntu上正常运行)
- 输入两个正整数m和n,输出m到n之间每个整数的自然对数
- 快速搭建koa2手脚架指南
- CSS 实现内阴影的方法
- Connection must be valid and open.