简单的图片排序
程序员文章站
2022-06-27 22:25:30
昨天工作的时候写了图片的排序接口,让后台自定义图片的位置. 话不多说先上修改图片序号的实现原理: 将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端需要展示的每个类型的图片量比较少,所以我写了个简单的排序.
如果排序量成千上万,数量比较多的不建议使用我这个实现原理,因为区间内每个图片的序号都需要修改对数据的压力比较大.
第一次写博客,手有点抖,大佬们随便看看就好