list集合根据某一元素获取上一个、下一个、第一个、最后一个

说明:

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值