说明:
1.NutMap = Map;
2.本文是用List<Map>来实现的,若使用List<T> 或者 List<String> 等原理是一样的;
3.大致思路就是先把所有的数据查询出来,根据某一个元素(或元素里某个唯一属性)来获取当前的下标,利用下标加减来实现。
4.本文仅适用部分场景,数据量太大的话自行处理.(建议使用rowid)
5.stream 好像有自带获取前一个、后一个、下标的方法,感兴趣的请自行查阅
6.数据库Mysql (其实哪种库都一样,反正用的是结果集合,纯属凑字数)
public NutMap listOrder(List<NutMap> listMaps,String nowId){
// 查询第一个,上一个,下一个,最后一个ID
String firstId = "";
String prevId = "";
String nextId = "";
String lastId = "";
if(Lang.isEmpty(listMaps)){
return NutMap.NEW();
}
// 当前记录的下标
int index = 0;
for (int i = 0; i < listMaps.size(); i++) {
NutMap billMap = listMaps.get(i);
if(billMap.getString("id").equals(nowId)){
index = i;
break;
}
}
firstId = listMaps.get(0).getString("id");
lastId = listMaps.get(listMaps.size() - 1).getString("id");
if(index > 0){
prevId = listMaps.get(index-1).getString("id");
}
if(index + 1 < listMaps.size()){
nextId = listMaps.get(index+1).getString("id");
}
// 第一个值与当前值相同, 把第一个的值和上一个的值置空 (根据需求灵活变动)
if(firstId.equals(nowId)){
firstId = "";
prevId = "";
}
// 最后一个值与当前值相同, 把最后一个的值和下一个的值置空 (根据需求灵活变动)
if(lastId.equals(nowId)){
nextId = "";
lastId = "";
}
return NutMap.NEW().addv("firstId",firstId).addv("prevId",prevId)
.addv("nextId",nextId).addv("lastId",lastId);