java 实现评论多层楼层合并为二层楼层(父级评论的子级及其嵌套子级)

java 实现评论多层楼层合并为二层楼层(父级评论的子级及其嵌套子级),第1张

java 实现评论多层楼层合并为二层楼层(父级评论的子级及其嵌套子级)

论坛实现类似b站评论楼层

思路:
1.先用递归的方式将所有数据查出
2.再用递归的方式将父级评论的子级及其嵌套子级

上代码:
1.递归查询所有评论
实体类 自己写吧

 public void recursiveCommonReplyList(List courseCommonList){
		for(CourseCommentDto cd :courseCommonList){
			List courseCommonReplyList = findCourseCommonReplyList(cd.getId());
			if(courseCommonReplyList !=null){
				cd.setReplyList(courseCommonReplyList);
				recursiveCommonReplyList(courseCommonReplyList);
			}
		}
	}

2.再用递归的方式将父级评论的子级及其嵌套子级

public void mergeChildrenList(List courseCommonList){
		for (CourseCommentDto comment : courseCommonList) {
			// 防止checkForComodification(),而建立一个新集合
			ArrayList fatherChildren = new ArrayList<>();
			// 递归处理子级的回复,即回复内有回复
			findChildren(comment, fatherChildren);
			// 将递归处理后的集合放回父级的孩子中
			comment.setReplyList(fatherChildren);
		}
	}


	
	public void findChildren(CourseCommentDto  parent, List fatherChildren) {
		// 找出直接子级
		List comments = parent.getReplyList();
		// 遍历直接子级的子级
		for (CourseCommentDto comment : comments) {
			// 若非空,则还有子级,递归
			if (!comment.getReplyList().isEmpty()) {
				findChildren(comment, fatherChildren);
			}
			// 已经到了最底层的嵌套关系,将该回复放入新建立的集合
			fatherChildren.add(comment);
			// 容易忽略的地方:将相对底层的子级放入新建立的集合之后
			// 则表示解除了嵌套关系,对应的其父级的子级应该设为空
			comment.setReplyList(new ArrayList<>());
		}
	}

缺点:当回复条数太多时 由于子类是由子级嵌套实现 所以无法在mysql层进行分页 分页方法需要重新编写

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4670975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存