• Map:比较新增加日期的和需要删除的日期 使用方法


    1.场景描述:根据在日历选择的日期,数据库来保持我们选择日期。

    2.方法,硬删除的方法,每次全部删除,然后再重新添加选择的新的日期。这样导致如果需要保存create_time的情况,那么每次操作的都是最新的create_time

    3.思路,只要动态发生变化的才需要进行添加,或删除。如:

    3.1 20150125,20150126,20150127,

    3.2 20150124,20150125,20150126,(新增一个20150124,删除一个20150127,中间的20150125,20150126不变)

    3.1中的3个日期放入Map中,日期作为key,value默认为1

    3.2中的3个日期放入Map中,日期作为key,value默认为1

    遍历3.2中的Map,和3.1中的Map进行比较,存在相同的,将Value加1变成2,新增的放入另外一个3.3 Map中等待添加。

    4.最后把需要3.1中value=1的删除,将3.3 Map添加进来就可以了。这个思路也可以比较两个List的重复项。

    5.实际工作中的代码:

    try{
    //            carFilterMapper.delCarFilter(carNo);  //逻辑调整,不要先删除,后添加的方式。
                
                Map<String,Integer> mpNew = new HashMap<String, Integer>();
                for (String string : busyTime) {
                    mpNew.put(string, 1);  //默认值1
                }
                
                List<Map<String,Object>> addFilters=new ArrayList<Map<String,Object>>();   //新增的。
                //逻辑调整,已经存在的记录。
                Map<String,Integer> mpOld = new HashMap<String, Integer>();
                List<String> ls = carFilterMapper.queryBusyTimeStr(carNo);
                for (String string : ls) {
                    mpOld.put(string, 1);
                }
                
                for(Map.Entry<String, Integer> entry:mpNew.entrySet()){  //新的
                    String date = entry.getKey();
                    if(mpOld.containsKey(date)){
                        mpOld.put(date, 2);  //标识旧的。Value变成2,没有重复的Value仍然是原来的,这也是我们需要删除的。
                    }else{
                        Map<String,Object> addBusyTime = new HashMap<String, Object>();
                        addBusyTime.put("carNo", carNo);
                        addBusyTime.put("date", date);
                        addBusyTime.put("week", Calculator.getWeekByTime(date));
                        addFilters.add(addBusyTime);
                    }
                }
                
                //需要移除的。
                for(Map.Entry<String, Integer> entry:mpOld.entrySet())
                {
                    if(entry.getValue()==1)  //无重复的。删除
                    {
                        String date = entry.getKey();  //日期
                        Map<String,Object> delBusyTime = new HashMap<String, Object>();
                        delBusyTime.put("carNo", carNo);
                        delBusyTime.put("date", date);
                        
    //                    delFilters.add(busyTime);
                        carFilterMapper.delCarFilterByDate(delBusyTime);
                    }
                }
                
                
                if(addFilters != null && addFilters.size() != 0){
                    carFilterMapper.addCarFilterV4(addFilters);
                }
                
                /*List<Map<String, Object>> param = new ArrayList<Map<String, Object>>();
                
                if (busyTime != null && busyTime.size() != 0){
                    for (String date : busyTime){
                        Map<String, Object> m = new HashMap<String, Object>();
                        m.put("carNo", carNo);
                        m.put("date", date);
                        m.put("week", Calculator.getWeekByTime(date));//add by zg 2014.12.28 得到星期
                        param.add(m);
                    }
                    carFilterMapper.addCarFilterV4(param);
                }*/
                
            } catch (Exception e){
                logger.error(e.toString());
                return ErrorCode.SYS_ERROR;
            }
            return ErrorCode.SUCCESS;
  • 相关阅读:
    drawcall优化
    Java基础:动态代理在RPC框架中应用
    ACdream ACfun
    图片压缩之处理小图片压缩策略
    ASP内置对象—Request、Response 、Server、Application 、ObjectContent(一)
    alter
    UltraISO制作U盘启动盘安装Win7/8/10系统攻略
    Libcurl的初步实现tfp上传下载功能
    微信企业号开发:获取AccessToken
    Ubuntu 安装OpenGL
  • 原文地址:https://www.cnblogs.com/simpledev/p/4253920.html
Copyright © 2020-2023  润新知