根据map的key唯一实现需求

最近在做一个以天为列的列表展示,但是通过接口拿过来的数据时间并不是连续规律的,而前端赋值是依据数组下标赋值,所以我后台根据map的key值重复覆盖的方式进行逻辑处理。

已知列为31天,将它(01,02,03....)作为key值,并存储对应的value值,在进行嵌套循环时已知key就31个,循环时进行判断如果这次循环的值没有则补充到map此次循环key对应value一个" - ",在循环有值时如果此key已经填充上" - "因为map中key的唯一性会进行覆盖,这样数据就完美的按照要求存储了,当然在判断没有值填充" - "时一定要判断此key是否存在了非" - "值,如果存在则跳过。

 

 

// 使用map的key相同会覆盖的特性处理没有值时按照序列填空
    public List<Map<String, Object>> jsontolist(List<Map<String, Object>> jlist, int type) {
        List<Map<String,Object>> mList = new ArrayList<Map<String,Object>>();// 定义list接受数据
        Map<String,Object> map = new HashMap<String,Object>();// 定义map
        for (Map<String,Object> jltm : jlist) {// 循环原始数据
            for (int j = 1; j <= 31; j++) {// 列为31天
                
                String tm = null;// 获取时间的天数为key
                
                if(type==0) {// 为0时是用电量的时间取值      示例为tm=2019-11-23
                    tm = String.valueOf(jltm.get("tm")).split("-")[2].substring(0, 2);
                }else if(type==1) {// 为1时是最大负荷的时间取值    示例为 tm=2019-1123     
                    tm = String.valueOf(jltm.get("tm")).split("-")[1].substring(2, 4);
                }else if(type==2) {// 为2时是电度电费的时间取值    示例为 tm=20191123   
                    tm = String.valueOf(jltm.get("tm")).substring(6, 8);
                }
                
                String key = null;
                if (j<10) {// 判断小于10时前面加0便于与原始数据截取的值对比
                    key = "0"+j;
                }else {
                    key = String.valueOf(j);
                }
                if (tm.equals(key)) {// 判断嵌套循环的key和时间数据一致时赋值
                    DecimalFormat decimalFormat=new DecimalFormat("0.00");
                    map.put(key, decimalFormat.format(jltm.get("value")));// 根据前端需要字段存
                }else{
                    if (map.get(key)=="-"||map.get(key)==null) {
                        map.put(key, "-");// 根据前端需要字段存
                    }
                }
            }
        }
        // 循环取值
        for (int j = 1; j <= 31; j++) {
            Map<String,Object> mm = new HashMap<String,Object>();// 定义map存值
            String key = null;
            if (j<10) {
                key = "0"+j;
            }else {
                key = String.valueOf(j);
            }
            mm.put("tm", key);// 赋值key
            mm.put("value", map.get(key));// 赋值值
            mList.add(mm);// map的key不能重复,存到list里
        }
        return mList;
    }

 

 

--有更好的处理方法请大神评论,源码审核中,通过加链接

posted @ 2019-11-23 15:49  余生大大  阅读(25)  评论(0编辑  收藏  举报