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;

Map:比较新增加日期的和需要删除的日期 使用方法的更多相关文章

  1. HTML5每日一练之input新增加的六种时间类型应用

    今天介绍一下input在HTML5中新增加的时间类型的应用,与昨天的练习一样,如果在以下这几种输入框中输入的格式不正确,也是无法提交的. 注意:此种类型的input在Opera10+中效果为佳,Chr ...

  2. ECMAScript6标准新增加的内容

    首选呐,你得了解一下javascript和ECMAScript的关系: 编程语言JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化.ECMAS ...

  3. Array 新增加的一些API用法

    es6中新增加了数组的一些用法,基本上是看例子就可以大致明白具体意思. Array.from Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历的对象(包括 ES6 新增的数 ...

  4. [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)

    [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥) nohacks 发表于 2016-5-29 17:12:51 https:// ...

  5. 在Android4.4上新增加keycode

    keycode是android定义好的,但是有时候无法满足需要,进行定制化难免会涉及到新增加keycode.分成两部分,驱动和framework,这里主要讲解framework部分: 一.驱动部分: ...

  6. css3新增加的选择器

    css3新增加的选择器 一.属性选择器: E[attr] 只要有属性名E[attr=value] 属性名=属性值E[attr~=blue] 包含这个blue整个单词就可以E[attr^=c] 以这个字 ...

  7. 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

    五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...

  8. java8在Collection中新增加的方法removeIf

    记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题.问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就直接说,List的有自带的remove方 ...

  9. Java 8新特性探究(四)深入解析日期和时间-JSR310

    众所周知,日期是商业逻辑计算一个关键的部分,任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.但java之前的日期做法太令人恶心 ...

随机推荐

  1. Linux驱动开发之字符设备模板

    /***************************** ** 驱动程序模板* 版本:V1* 使用方法(末行模式下):* :%s/xxx/"你的驱动名称"/g********* ...

  2. java的软件包

    Java的软件包:简单来说,软件包就是把类放在不同的文件夹下,提供了命名空间 package wang; //用package将Test类放在wang文件下 class Test{ public st ...

  3. 浅议iOS网络数据解析

    /*------------------------------------ 数据解析: 1.JSON数据 --------------------------------*/ 重点:1.什么是JSO ...

  4. 【转】Hibernate入门实例

    1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...

  5. ASP.NET2.0中对TextBox的Enable和ReadOnly属性的限制

    在以前的ASP.NET 1.x版本中,设置为ReadOnly的TextBox控件在客户端更改了值后,在服务器端仍然可以得到修改后的值,但在ASP.NET 2.0中,这种做法已经限制.这是为了提高应用程 ...

  6. 教你怎么安装MongoDB

    以下命令以root用户运行:#sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10#echo 'deb http://do ...

  7. WordPress实现长篇文章/日志/单页面分页功能效果

    在WordPress里写文章,如果内容很多,你可能想要把文章分成几页来让访客浏览,这样既保持了网页的美观,也提高了网页的打开速度.但是在WordPress默认提供的按钮里,你可能找不到文章分页功能所对 ...

  8. CentOS安装vsftpd

    版本:vsftpd-3.0.2-9.el7.x86_64(CentOS是64位的). 1.安装vsftpd yum -y install vsftpd 2.配置vsftpd 修改配置前把原始配置文件备 ...

  9. 替换APK中的jar包文件

    [Qboy] 2014年12月21日 这几天,我第一次做的android游戏(WE!青春纪)马上就要上线.上线之前需要把各个渠道的SDK加入到我们游戏中,与渠道进行联运.但是商务很给力,一下子联系了1 ...

  10. cocos2dx中的场景和使用方法

    1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...