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. 【转】 BSS段 数据段 代码段 堆栈 指针 vs 引用

    原文:http://blog.csdn.net/godspirits/article/details/2953721 BSS段 数据段 代码段 堆栈 (转+) 声明:大部分来自于维基百科,自由的百科全 ...

  2. Python脚本控制的WebDriver 常用操作 <三> 浏览器最大化

    下面将模拟执行一个控制浏览器最大化的操作 测试用例场景 当我们在测试中使用一些基于图像和坐标的辅助测试工具时,我们就会需要使浏览器在每次测试时保存最大化,以便在同一分辨率下进行图像比对和坐标点选. 举 ...

  3. Java jdk环境变量配置

    首先安装jdk,现在已经是jdk 8了,也不知道能不能好好用了...

  4. WPF socket通讯 UDP接收消息

    客户端: private Socket socket; private IPEndPoint ipEndPoint; private void sendMessageHandler() { //服务端 ...

  5. Java当中的I/O的字符流

    字符流读写文件时,以字符为基础 I/O当中字符流的核心类 Reader类和Writer类是所有字符流类的父类,同样也是抽象类.FileReader和FileWriter分别是它们的子类. 核心类的核心 ...

  6. Java 控制台执行带自定义包定义的类,出现“Exception in thread "main" java.lang.NoClassDefFoundError: ConnectSQLServer (wrong name: sine/ConnectSQLServer)”

    1.先说明一下代码实现:自定义package sine, 源代码保存路径为:E:\JSP\HibernateDemo\HibernateDemoProject\src\sine\ConnectSQLS ...

  7. 【转】C#中Invoke的用法

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...

  8. linux log find 查询

    常用的日志查询命令:find 1.从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行: find / -type f -name "*.log" | xa ...

  9. GraphLab面向机器学习的并行框架『针对图数据处理模型』

    最近在做文本处理知识的梳理,关注了CMU提出的GraphLab开源分布式计算系统 这是关于GraphLab的PPT:Distributed GraphLab『 http://cheng-qihang- ...

  10. Go support for Android

    Go support for Android David Crawshaw June 2014 Abstract We propose to introduce Go support for the ...