第一 兩個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 去刪除數據,留下的數據是兩邊沒有找到的,這種算法也是可行
算法加邏輯,靈活多變,還是需要在實際過程中實踐哪種更優算法。