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;
Map:比较新增加日期的和需要删除的日期 使用方法的更多相关文章
- HTML5每日一练之input新增加的六种时间类型应用
今天介绍一下input在HTML5中新增加的时间类型的应用,与昨天的练习一样,如果在以下这几种输入框中输入的格式不正确,也是无法提交的. 注意:此种类型的input在Opera10+中效果为佳,Chr ...
- ECMAScript6标准新增加的内容
首选呐,你得了解一下javascript和ECMAScript的关系: 编程语言JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化.ECMAS ...
- Array 新增加的一些API用法
es6中新增加了数组的一些用法,基本上是看例子就可以大致明白具体意思. Array.from Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历的对象(包括 ES6 新增的数 ...
- [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)
[原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥) nohacks 发表于 2016-5-29 17:12:51 https:// ...
- 在Android4.4上新增加keycode
keycode是android定义好的,但是有时候无法满足需要,进行定制化难免会涉及到新增加keycode.分成两部分,驱动和framework,这里主要讲解framework部分: 一.驱动部分: ...
- css3新增加的选择器
css3新增加的选择器 一.属性选择器: E[attr] 只要有属性名E[attr=value] 属性名=属性值E[attr~=blue] 包含这个blue整个单词就可以E[attr^=c] 以这个字 ...
- 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...
- java8在Collection中新增加的方法removeIf
记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题.问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就直接说,List的有自带的remove方 ...
- Java 8新特性探究(四)深入解析日期和时间-JSR310
众所周知,日期是商业逻辑计算一个关键的部分,任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.但java之前的日期做法太令人恶心 ...
随机推荐
- WIN8+VS2013编写发布WCF之三(调用)
在文二中部署成功后就可以在客户端程序中使用服务了...使用服务的过程总是这么酣畅淋漓.当然,对应文二中的三种部署方式,我也会在此描述三种使用方式,一一对应. 都是新建个程序了,然后开始介绍. 一.VS ...
- C#中virtual和abstract的区别
先说区别: virtual意思是虚拟,abstract意思是抽象. virtual只修饰方法,abstract修饰方法和类. virtual方法必须有实现,abstract方法必须没有实现. publ ...
- Python学习教程(learning Python)--2.3.2 Python函数实参详解
本节主要讨论函数调用时参数的实参问题. 1. 实参赋值顺序和型参定义顺序一一对应 Python在调用哪个子函数时,如果型参为多个,一般实参的排布顺序和型参顺序保持一致,即一一对应.我们以下面的代码为例 ...
- Oracle Study Note : Users and Basic Security
1. view the default user account SQL> select username from dba_users; 2. lock all users and set t ...
- 如何让Advanced Installer卸载软件时保留一些文件
http://www.advancedinstaller.com/user-guide/qa-keep-file.html You need to modify some of the resourc ...
- EXCLE使用宏生成目录
宏代码: Sub mu() Dim i As Integer Dim ShtCount As Integer Dim SelectionCell As Range ShtCount = Workshe ...
- linux log find 查询
常用的日志查询命令:find 1.从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行: find / -type f -name "*.log" | xa ...
- 一段高质量的SQL从问问题开始(笔记)
首先SQL书写的目的是为了解决问题,因此只有明白了要解决的问题,才能写出更加高效的SQL语句,才能优雅的解决问题,获得更多的快乐! 在写一个SQL语句的时候不妨像优化器一样思考,问自己以下的这些问题, ...
- hdu 5326 Work
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5326 Work Description It’s an interesting experience ...
- bzoj 3223/tyvj 1729 文艺平衡树 splay tree
原题链接:http://www.tyvj.cn/p/1729 这道题以前用c语言写的splay tree水过了.. 现在接触了c++重写一遍... 只涉及区间翻转,由于没有删除操作故不带垃圾回收,具体 ...