Java SpringBoot 若依 后端实现评论“盖楼“,“楼中楼“功能 递归查询递归组装评论结构

效果图

在这里插入图片描述

数据库设计

还可以使用路径模块 一级评论id,二级评论id, 用like最左匹配原则查询子评论
因为接手遗留代码,需要添加字段,改动数据库,我就不改动了,导致我下面递归查询子评论不是很好。

在这里插入图片描述

业务代码

    @Override
    public List<SubReviewForm> getSubReviewForms(String publishingId, String creatorId, String sort, String type, String systemType) {

        //查询一级评论
        SubReviewForm querySubReviewForm = new SubReviewForm();
        querySubReviewForm.setSubPublishingParentId(publishingId);
        //只看楼主
        if (StringUtils.isNotBlank(creatorId)) {
            querySubReviewForm.setCreatorId(creatorId);
        }
        PageUtils.startPage();
        List<SubReviewForm> list = subReviewFormMapper.getObjList(querySubReviewForm, sort, null);
        if (CollectionUtils.isEmpty(list)) {
            return list;
        }
        //递归查询二级评论以及子评论
        List<String> ids = list.stream().map(SubReviewForm::getId).collect(Collectors.toList());
        List<SubReviewForm> subReviewFormList = recursiveQuerySubReviewForm(ids);

        //递归组装楼层
        recursiveAssembleSubReviewForm(list,subReviewFormList);
}
    /**
     * 递归查询评论
     *
     */
    public List<SubReviewForm> recursiveQuerySubReviewForm(List<String> ids) {
        List<SubReviewForm> subReviewFormList = subReviewFormMapper.getReviewBySubPublishingParentId(ids);
        if (CollectionUtils.isEmpty(subReviewFormList)) {
            subReviewFormList = new ArrayList<>();
        } else {
            // 递归获取楼层
            List<String> newIds = subReviewFormList.stream().map(SubReviewForm::getId).collect(Collectors.toList());
            subReviewFormList.addAll(recursiveQuerySubReviewForm(newIds));
        }
        return subReviewFormList;
    }

    /**
     * 递归组装评论楼层
     *
     */
    private void recursiveAssembleSubReviewForm(List<SubReviewForm> rootList, List<SubReviewForm> subList) {
        for (SubReviewForm reviewForm : rootList) {
            for (SubReviewForm subReviewForm : subList) {
                //一级评论
                if (StringUtils.equals(reviewForm.getId(), subReviewForm.getSubPublishingParentId()) ||
                        //二级评论以及子评论
                        StringUtils.equals(reviewForm.getSubPublishingId(), subReviewForm.getSubPublishingParentId())) {
                    reviewForm.getChildren().add(subReviewForm);
                }
            }
            recursiveAssembleSubReviewForm(reviewForm.getChildren(), subList);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值