博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap 分拣存储 实现一对多映射
阅读量:6442 次
发布时间:2019-06-23

本文共 5311 字,大约阅读时间需要 17 分钟。

在我们的印象中,Map k,v 映射,一对一的比较多,下面主要讲一对多的关系映射,主要需求在于,需要把很多的,杂乱的数据 按照不同的类型进行分类处理,A,B,C类型的数据进行分类统计

比如,计算字母/单词出现的次数
String str = "t/h/is/is/a/car/a/n/d/t/ha/t/is/tr/uck/a/nd/w/h/e/r/e/is/t/he/s/t/uffs";

String [] str =              "t/h/is/is/a/car/a/n/d/t/ha/t/is/tr/uck/a/nd/w/h/e/r/e/is/t/he/s/t/uffs".split("/");      Map
map = new HashMap
(); for(String key:str){ //方法1 //检查map里面是否存在这个单词,如果不存在 说明之出现一次// if(!map.containsKey(key)){// map.put(key, 1);// }else{// map.put(key, map.get(key)+1);//存在 就在前面的基础上面+1 计算出现的次数// } //方法2 Integer value = map.get(key); if(value == null){ map.put(key, 1); }else{ map.put(key, value+1); } } Set
keySet = map.keySet(); Iterator
it = keySet.iterator(); while(it.hasNext()){ String key = it.next(); Integer value = map.get(key); System.out.println(key+"-->"+value); } }

当然,这里的value也可以是对象,对于不同的场景 进行灵活的应用。

实际需求中如何运用HashMap实现过滤重复

这里的重复不一定是某个字段一样的,而且时间点不重叠 这里需要校验不重叠的字段 有 "员工所在部门","出发点","目的点","生效日期","失效日期","出发时点","到达时点","出发分钟","到达分钟"

entity 是需要校验的对象。

final Map
> trfsVo = new HashMap
> (); //判断是否重复 if (entity.getDeptCode()!=null && entity.getBeginDeptCode() != null && entity.getEndDeptCode()!=null && entity.getEffectiveDate() != null && entity.getInvalidDate() != null ) { //三个点重复就继续判断时间点是否重叠 String key = StringUtil.append(entity.getDeptCode(),'_',entity.getBeginDeptCode(),'_',entity.getEndDeptCode()); if (trfsVo.containsKey(key)) { List
vo = trfsVo.get(key); Calendar now = Calendar.getInstance(); now.set(Calendar.HOUR_OF_DAY, entity.getBeginTimePoint()); now.set(Calendar.MINUTE, entity.getBeginTimeMinute()); long entity_start = now.getTime().getTime(); now.set(Calendar.HOUR_OF_DAY, entity.getEndTimePoint()); now.set(Calendar.MINUTE, entity.getEndTimeMinute()); long entity_end = now.getTime().getTime(); for(TransferNumUnitPrice vor:vo) { //entity代表原来excel里面的数据,vor 从excel里面过滤处理出来有3个code重复的数据 if ( //过滤生效日期在区间范围重叠 (( (vor.getEffectiveDate().compareTo(entity.getEffectiveDate())!=1) && (vor.getInvalidDate().compareTo(entity.getEffectiveDate())!=-1) ) || //过滤失效日期在区间范围重叠 ( (vor.getEffectiveDate().compareTo(entity.getInvalidDate())!=1) && (vor.getInvalidDate().compareTo(entity.getInvalidDate())!=-1) ) || //过滤包含重叠 ( (vor.getEffectiveDate().compareTo(entity.getEffectiveDate())==1) && (vor.getInvalidDate().compareTo(entity.getInvalidDate())==-1) )) ) { now.set(Calendar.HOUR_OF_DAY, vor.getBeginTimePoint()); now.set(Calendar.MINUTE, vor.getBeginTimeMinute()); long vorhm_start = now.getTime().getTime(); now.set(Calendar.HOUR_OF_DAY, vor.getEndTimePoint()); now.set(Calendar.MINUTE, vor.getEndTimeMinute()); long vorhm_end = now.getTime().getTime(); if ( //开始时间在区间范围中 (vorhm_start <= entity_start && vorhm_end >= entity_start) || //结束时间在区间范围中 (vorhm_start <= entity_end && vorhm_end >= entity_end) || // 时间包含 (vorhm_start > entity_start && vorhm_end < entity_end) ) { //加入异常 比较异常 vo.add(entity); throw new NovatarRuntimeException(getMessageSource().getMessage("transferNumUnitPrice.excelDataConflict")); } } } //加入需要比较的无异常的数据 进行比较 vo.add(entity); } else { List
vo = new LinkedList
(); vo.add(entity); trfsVo.put(key, vo); }

转载地址:http://dncwo.baihongyu.com/

你可能感兴趣的文章
webpack的简单实例学习
查看>>
go-callvis 代码分析工具
查看>>
如何在网络视听行业建一扇内容安全大门?
查看>>
阿里云重磅推出物联网设备身份认证Link ID²
查看>>
手把手教你vue配置请求本地json数据
查看>>
作为数据科学家,我都有哪些弱点?
查看>>
JavaScript数据精度缺失问题
查看>>
百度开源情感分析Senta,让你更懂用户
查看>>
Java 几种线程状态之间的相互关系
查看>>
史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等
查看>>
SQLServer之多表联合查询
查看>>
MSSQLSERVER系统数据库的迁移
查看>>
js原生简单的上传图片
查看>>
刷面试题之<<携程 地面业务 前端面试经历>>
查看>>
node笔记(一)-http模块,url模块
查看>>
小程序学习笔记(1)
查看>>
React-新的生命周期(React16版本)
查看>>
vue 博客优化,服务端渲染(SSR)指南
查看>>
交互式数据可视化-D3.js(三)比例尺
查看>>
Python--Redis实战:第二章:使用Redis构建Web应用:第一节:登录和cookie缓存
查看>>