第一 两个list要进行 新增,删除,和修改的标记,然后到数据进行相应操作,
能够处理的情况有两种,
第一种 是把两种结果相互比较,放到MAP里,取出为NULL说明是另一个LIST没有的KEY,
第二种, 找到相同的ID值后, 标记出来,然后加到删除的list里
第一种方式的代码 封装到map是为了减少循环次数 , 还是可以进行优化, 用SET去重,那就不需要封装两次LIST
List<Map<String, Object>> snmpList = snmpMapper.getSnmpListAll();
//OSS同步的数据
JSONArray snmpResult = json.getJSONArray("result");
if (snmpList.size() < 0) {
snmpMapper.insertAllSnmp(snmpResult);
return;
}
//存入json 拿值比较更新
JSONObject snmpobj = new JSONObject();
snmpList.stream().forEach(s -> {
HashMap setmap = (HashMap) s;
JSONObject so = new JSONObject(setmap);
snmpobj.put(so.getString("id"), so);
});
JSONArray updateList = new JSONArray();
JSONArray addList = new JSONArray();
snmpResult.stream().forEach(s -> {
JSONObject sp = (JSONObject) s;
JSONObject somap = snmpobj.getJSONObject(sp.getString("id"));
if (null == somap) {
addList.add(sp);
} else if (sp.getString("id").equals(somap.getString("id")) && !sp.toString().replace("\"", "").equals(
somap.toString().replace("\"", ""))) {
String createTime = utils.getLocalTime();
sp.put("createTime", createTime);
updateList.add(sp);
}
});
//要删除的SNMP
JSONArray deleteList = new JSONArray();
//封装到key
JSONObject resutobj = new JSONObject();
snmpResult.stream().forEach(r -> {
JSONObject res = (JSONObject) r;
resutobj.put(res.getString("id"), res);
});
snmpList.stream().forEach(sm -> {
HashMap setmap = (HashMap) sm;
JSONObject sp = new JSONObject(setmap);
JSONObject resmap = resutobj.getJSONObject(sp.getString("id"));
if (null == resmap) {
deleteList.add(sp);
}
});
第二种方式代码 就是两次循环 这种效率较低,数据量小的时候可以这样操作
List listresult = snmplist
List listoss = osslist;
for(int i=0;i<listresult.size();i++){
obj = listresult.get(i);
// 给一个标记,如果在另一个list找到相同KEY的数据了,就标记不是新增
boolean flag =true;
for(int h=0;h<listoss.size();h++){
ossobj = listoss.get(i);
if(obj.get("id").equal(ossobj.get("id"))){
flag = false; 说明找到相同的值了,
}
//如果里面的list循环完之后, 都没有找到相同的值,说明是新增加
if(flag=true){
addlist.add(obj);
}
}
}
删除的办法也是同理, 用listoss 去循环 listresult这个结果,得到的数据就是删除,
区别就是两个list相互比较, 如果不相互比较,还可以用SET 去删除数据,留下的数据是两边没有找到的,这种算法也是可行
算法加逻辑,灵活多变,还是需要在实际过程中实践哪种更优算法。