java实现置顶排序功能 Published on Sep 27, 2023 in 随笔 with 0 comment 使用的是当前时间作为排序 默认是拿到上一个排序号减一作为当前排序的排序号,但是有可能会重复排序号 所以当前排序号后面的数据要顺延-1处理 ```java @Override public void topSort(String targetContentId) { if (targetContentId.equals(this.getContentEntity().getId())) { return; // 排序目标是自己直接返回 } checkLock(); //上一条数据 CmsArticle prev = this.getArticleService().getById(targetContentId); Long topFlag = prev.getTopFlag() - 1; this.content.setTopFlag(topFlag); //排序时间重复 则后面的数据顺延-1 LambdaQueryWrapper q = new LambdaQueryWrapper() .eq(CmsArticle::getCategoryId, prev.getCategoryId()) .ne(CmsArticle::getTopFlag, '0') .ne(CmsArticle::getTopFlagType, 'N') .le(CmsArticle::getTopFlag, topFlag) .orderByDesc(CmsArticle::getTopFlag).orderByDesc(CmsArticle::getSortFlag); List articles = this.getArticleService().getContentMapper().selectList(q); recursiveSort(articles, 0, topFlag); // 批量更新文章信息 this.getArticleService().saveOrUpdateBatch(articles); this.getArticleService().updateById(content); } public void recursiveSort(List articles, int start, Long topFlag) { if (start >= articles.size()) { return; // 递归结束条件:已经遍历完整个列表 } CmsArticle currArticle = articles.get(start); if (currArticle.getTopFlag().equals(topFlag)) { currArticle.setTopFlag(topFlag - 1); // 顺延-1处理 topFlag--; } recursiveSort(articles, start + 1, topFlag); // 递归遍历下一篇文章 } ``` 本文由 admin 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。