欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简单的图片排序

程序员文章站 2022-03-18 14:09:16
昨天工作的时候写了图片的排序接口,让后台自定义图片的位置. 话不多说先上修改图片序号的实现原理: 将5号移到2号, 此时区间 [ 2,5 ) 内的排序号都要加1. 将2号移到5号, 此时区间 ( 2,5 ] 内的排序号都要减1. 新增图片序号的实现原理: 新增图片序号为3,那么区间 [ 3,∞ ) ......

昨天工作的时候写了图片的排序接口,让后台自定义图片的位置.

话不多说先上修改图片序号的实现原理:

简单的图片排序

 

 

     将5号移到2号,  此时区间 [ 2,5 ) 内的排序号都要加1.

 

 简单的图片排序

 

 

      将2号移到5号,  此时区间 ( 2,5 ] 内的排序号都要减1.

新增图片序号的实现原理:

简单的图片排序

 

 新增图片序号为3,那么区间 [ 3,∞ ) 内的序号均加1

 

了解原理后上实现代码:

id:图片id;

imgtype:图片类型;

orderid:图片序号.

private void orderidsort(appimgbackvo appimg){
example exampletwo = new example(appimg.class);
example.criteria criteriatwo = exampletwo.createcriteria();
criteriatwo.andequalto("imgtype", appimg.getimgtype());
//通过图片类型查找是否存在这个类型的图片
list<appimg> appimglist = appimgmapper.selectbyexample(exampletwo);
//如果没有这个类型的图片
if(appimglist.size() == 0){
//排序号赋值为1
appimg.setorderid(1);
}else {
//如果不输入排序号
if(appimg.getorderid() == null){
//已存在的数量
integer orderidmax = appimgmapper.selectmaxorderid(appimg.getimgtype());
//如果是新增,排序号默认为:数量+1
if(appimg.getid() == null){
appimg.setorderid(orderidmax+1);
}else {//如果是修改:排序号默认为最大排序号
appimg.setorderid(orderidmax);
}
}else {//自定义排序号
//当排序号小于1时,默认为1
if(appimg.getorderid() < 1){
appimg.setorderid(1);
}
if(appimg.getid() == null){//添加
//排序号大于原有数量+1时默认为最大数+1
if(appimg.getorderid() > appimglist.size()+1){
appimg.setorderid(appimglist.size()+1);
}
                //排序号大于原有数量+1时默认为原有数量+1
                for (appimg appimgtwo : appimglist){                    区间内排序号+1                    if(appimgtwo.getorderid() >= appimg.getorderid()){
appimgtwo.setorderid(appimgtwo.getorderid()+1);
appimgmapper.updatebyprimarykey(appimgtwo);
}
}
}else {//修改
if(appimg.getorderid() > appimglist.size()){
//排序号大于原有数量+1时默认为原有数量
appimg.setorderid(appimglist.size());
}
appimg appimgold = appimgmapper.selectbyprimarykey(appimg.getid());
//原先的排序号
integer orderidold = appimgold.getorderid();
//修改后的排序号
integer orderidnew = appimg.getorderid();
//遍历所有同类型图片
for (appimg appimgtwo : appimglist){
if(orderidold > orderidnew){ //向前移动
//改动区间内的排序号+1
if(appimgtwo.getorderid() >= orderidnew && appimgtwo.getorderid() < orderidold){
appimgtwo.setorderid(appimgtwo.getorderid()+1);
appimgmapper.updatebyprimarykey(appimgtwo);
}
}else {//向后移动
//改动区间内的排序号-1
if(appimgtwo.getorderid() <= orderidnew && appimgtwo.getorderid() > orderidold){
appimgtwo.setorderid(appimgtwo.getorderid()-1);
appimgmapper.updatebyprimarykey(appimgtwo);
}
}
}
}
}
}
}
因为项目里在app端需要展示的每个类型的图片量比较少,所以我写了个简单的排序.
如果排序量成千上万,数量比较多的不建议使用我这个实现原理,因为区间内每个图片的序号都需要修改对数据的压力比较大.
第一次写博客,手有点抖,大佬们随便看看就好