java 插入排序自动排序

适用情况

1 添加的标签默认排在第一位

比如:原有序列 1,2,3 ;新增标签时

 新增标签序列为1 ,原有序列1->2,2->3,3->4

2 修改标签时,顺序自动向前排序

比如:原有序列 1,2,3 ,4;编辑标签时3 为1时:

 编辑标签时31(向上移动),原有序列1->2,2->3,3->4,4->5
 编辑标签时13(向下移动),原有序列2->1,3->2,3->1,4->4

3 删除标签时,标签自动排序

比如:原有序列 1,2,3 ,4;删除标签2时:

 编辑标签2,原有序列1->1,2->删除,3->2,4->3
    /**
     * @param: request
     * @param: operator null 排序;  0 添加; 1 删除;
     * @return: Boolean
     * @date: 2022/2/28
     */
    private Boolean updateViewIndex(ViewIndexRequest request, Integer isDeleted) {

        PbTag pbTag = pdTagDAO.selectById(request.getId());
        if (Objects.isNull(pbTag)) {
            throw new ErrorCodeException(ExceptionErrorEnum.BANNER_IS_NOT_EXIST);
        }
        List<PbTag> list = new ArrayList<>();
        if (isDeleted != null) {
            // 首位添加
            if (isDeleted == 0 && request.getViewIndex() == 1) {
                List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery());

                pbArticleList.forEach(x -> {
                    if (!x.getId().equals(request.getId())) {
                        x.setViewIndex(x.getViewIndex() + 1);
                        list.add(x);
                    }
                });
            } else if (isDeleted == 1) {
                // 删除时 大于自身的都减去1

                List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery()
                        .gt(PbTag::getViewIndex, pbTag.getViewIndex()));
                pbArticleList.forEach(x -> {
                    if (!x.getId().equals(request.getId())) {
                        x.setViewIndex(x.getViewIndex() - 1);
                        list.add(x);
                    }
                });
            }
        } else {
            // step1:判断是上移还是下移
            if (request.getViewIndex() <= pbTag.getViewIndex()) {
                // step2:如果是上移,则修改大于等于要修改的banner的viewIndex都加一
                List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery()
                        .ge(PbTag::getViewIndex, request.getViewIndex())
                        .lt(PbTag::getViewIndex, pbTag.getViewIndex()));

                pbArticleList.forEach(x -> {
                    x.setViewIndex(x.getViewIndex() + 1);
                    list.add(x);
                });
            } else {
                // step4:如果是下移,则修改小于等于当前banner的viewIndex都减一,大于当前banner的viewIndex
                List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery()
                        .gt(PbTag::getViewIndex, pbTag.getViewIndex())
                        .le(PbTag::getViewIndex, request.getViewIndex()));
                pbArticleList.forEach(x -> {
                    x.setViewIndex(x.getViewIndex() - 1);
                    list.add(x);
                });

            }


        }
        Boolean record = updateBatchById(list);
        // step3:修改当前banner序号等于需改的viewIndex // step5:修改当前banner序号等于需改的viewIndex
        pbTag.setViewIndex(request.getViewIndex());
        Boolean flag = SqlHelper.retBool(pdTagDAO.updateById(pbTag));
        if (record && flag) {
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }
@Data
public class ViewIndexRequest {

    /**
     * 主键ID
     */
    private String id;

    /**
     * 上移下移下标
     */
    private Integer viewIndex;
}
public class PbTag implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId
    /**
     * 主键id
     */
    @TableField("id")
    private String id;

    /**
     * 标签名称
     */
    @TableField("name")
    private String name;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值