java List Map数据对比 找出相同和不同的内容

最近在搞一个,数据对比功能,但是需要得到新数据和数据库的数据,多出来的数据和缺少的内容


原先搞出来的是 弄了两个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,上班时间一般都在线。

大家要是还有什么好办法,也可以留言,一起完善一下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值