最近在搞一个,数据对比功能,但是需要得到新数据和数据库的数据,多出来的数据和缺少的内容
原先搞出来的是 弄了两个List集合进行匹配代码就不贴了,先说一下最早的思路
List<GongGl> list1=new ArrayList<GongGl>();//新数据
List<GongGl> list2=new ArrayList<GongGl>();//数据库数据
GongGl //公共类
如果list1>list2则说明有新数据,然后拿着list1里面的数据跟list2匹配,总会有一个不一样的,得到不一样以后直接放到数据库中
两个for循环
int aa=0;
for(int i=0;i<list1.size();i++){
GongGl ggl=(GongGl )list1.get(i);
for(int j=0;j<list2.size();j++){
GongGl ggl2=(GongGl )list2.get(i);
if(ggl.getName.equals(ggl2.getName)){
aa=1;
}
}
if(aa==0){
得到多出来的软件
}
}
后来经过测试发现,效率比较慢,这么循环假如各有1W条数据,你可以计算一下得循环多少次,再加上多人操作的话,
不出意外肯定会崩溃,后来优化了一下,下面是优化方法
// 生成map方法key为名称和版本
public Map<String, GongGl> createMap(List<GongGl> list) {
Map<String, GongGl> map = new HashMap<String, GongGl>();
for (GongGl g : list) {
String key = "";
String name = g.getRjmc();
String vesion = g.getRjbb();
if (name != null && !"".equals(name)) {
key += name;
key += "_";
}
if (vesion != null && !"".equals(vesion)) {
key += vesion;
}
map.put(key, g);
}
return map;
}
/**
* 获取comMap中有的数据,且该数据在target中未存在
*
* @param target
* ,比较目标
* @param comMap
* 需要比较的数据
* @return comMap中比target多出的数据。
*/
public List<GongGl> getDiffrentList(Map<String, GongGl> target,
Map<String, GongGl> comMap) {
List<GongGl> list = new ArrayList<GongGl>();
for (Map.Entry<String, GongGl> entry : comMap.entrySet()) {
String key = entry.getKey();
if (!target.containsKey(key)) {//如果没有则存放到List
list.add(comMap.get(key));
}
}
return list;
}
/**
* 获取多出来的map
*
* @param list_1
* @param list_2
* @return list_over_1的map为list_1比list_2多出来的集合,list_over_1同样。
*/
public Map<String, List<GongGl>> getComResulMap(List<GongGl> list_1,
List<GongGl> list_2) {
Map<String, List<GongGl>> map = new HashMap<String, List<GongGl>>();
// 1 转换成响应的map
Map<String, GongGl> map_1 = this.createMap(list_1);
Map<String, GongGl> map_2 = this.createMap(list_2);
List<GongGl> list_over_1 = this.getDiffrentList(map_2, map_1);
List<GongGl> list_over_2 = this.getDiffrentList(map_1, map_2);
map.put("list_over_1", list_over_1);
map.put("list_over_2", list_over_2);
return map;
}
这么调用就可以了
Map<String, List<GongGl>> map = getComResulMap(lll,ggllist);
List<GongGl> lllOver = map.get("list_over_1");// 缺少的数据
List<GongGl> ggllistOver = map.get("list_over_2");// 多出的数据
剩下的就是你自己的逻辑处理了
有不明白的可以加 QQ695438455,上班时间一般都在线。
大家要是还有什么好办法,也可以留言,一起完善一下