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. Python学习教程(learning Python)--2.3.1 Python传参函数设计

    本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单, ...

  2. Secondary IP Addressing

    Secondary IP Addressing secondary IP addressing. Secondary addressing uses multiple networks or subn ...

  3. ThinkPHP目录结构

    ThinkPHP框架目录结构 文件路径 文件描述 \index.php 入口文件 \Application 应用目录 \Public 资源文件目录 \ThinkPHP 框架核心目录   \Applic ...

  4. 微信支付开发h5发起支付再次签名,返回给h5前端

    注意:参数区分大小写.

  5. golang:slice陷阱

    slice陷阱,slice底层指向某个array,在赋值后容易导致array长期被引用而无法释放

  6. SQLite之读取数据库内容

    1.打开已有数据库. //打开数据库 - (BOOL )openDB {// 红色部分修改为自己的数据库路径 return (SQLITE_OK == sqlite3_open([@"/Us ...

  7. mysql数据库编码设置成utf-8,避免出现乱码

    设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 C ...

  8. java环境中基于jvm的两大语言:scala,groovy

    一.java环境中基于jvm的两大语言:scala,groovy 可以在java项目里混编这两种语言: scala:静态语言,多范式语言,糅合了面向对象.面向过程:可以与java和net互操作:融汇了 ...

  9. 利用LibreOffice转换ppt、doc转化pdf

    利用LibreOffice转换ppt.doc转化pdf LibreOffice下载地址:  http://www.libreoffice.org/download/libreoffice-fresh/ ...

  10. homework-02 二维的,好喝的(二维数组的各种子数组)

    1)输入部分 对于输入部分,我定义的输入格式是这样的 前两行为列数和行数 如果文件无法打开,或者输入文件格式不对,均会提示出错并退出 2)二维数组的最大矩形子数组 首先,我使用最最简单的暴力算法,直接 ...