在修改模块的时候 一条数据下有很多子数据,在进行修改的时候子数据也修改了(可能子数据中有修改的,新增的,删除的,没变化的),常用做法是直接把这条数据的子数据都删了,重新把这批子数据给插入数据库。但是有些业务复杂的(比如子数据的id和其他表关联过),这样的话就不可以把之前的子数据都给删掉重新插入了,因为重新插入的主键id不同。
这时候就需要找出这批数据中 需要新增的,删除的,修改的数据 进行相应的操作。
public static void main(String[] args){ JSONArray messages=new JSONArray();//新数据 JSONObject j1=new JSONObject(); j1.put("rcsId","111"); JSONObject j2=new JSONObject(); j2.put("rcsId","222"); JSONObject j3=new JSONObject(); j3.put("rcsId","333"); JSONObject j4=new JSONObject(); j4.put("rcsId","444"); messages.add(j1); messages.add(j2); messages.add(j3); messages.add(j4); List<RcsTopoMessage> beforeMessageList=new ArrayList<>();//原数据 beforeMessageList.add(new RcsTopoMessage("1","111")); beforeMessageList.add(new RcsTopoMessage("2","222")); beforeMessageList.add(new RcsTopoMessage("5","555")); /* JSONArray updateArray=new JSONArray(); JSONArray insertArray=new JSONArray(); int msgCount=0; if(messages!=null&&messages.size()>0){ msgCount=messages.size(); for(int i=0;i<messages.size();i++){ JSONObject msg=messages.getJSONObject(i); String rcsId=msg.getString("rcsId"); if(beforeMessageList.parallelStream().anyMatch(item ->item.getRcsId().equals(rcsId))){//存在 为修改数据 updateArray.add(msg); }else {//不存在说明是新增的 insertArray.add(msg); } } }*/ //那些是删除的msg? List<RcsTopoMessage> delete = beforeMessageList.stream().filter(item ->(messages.parallelStream().noneMatch(tm->item.getRcsId().equals(((JSONObject)tm).getString("rcsId"))))).collect(toList()); delete.forEach(e->System.out.println("需要删除的"+e.getRcsId())); //那些是修改的 JSONArray update = messages.stream().filter(tm ->(beforeMessageList.parallelStream().anyMatch(item->item.getRcsId().equals(((JSONObject)tm).getString("rcsId"))))).collect(Collectors.toCollection(JSONArray::new)); update.forEach(e->System.out.println("需要修改的"+((JSONObject)e).getString("rcsId"))); //那些是新增的 JSONArray insert = messages.stream().filter(tm ->(beforeMessageList.parallelStream().noneMatch(item->item.getRcsId().equals(((JSONObject)tm).getString("rcsId"))))).collect(Collectors.toCollection(JSONArray::new)); insert.forEach(e->System.out.println("需要新增的"+((JSONObject)e).getString("rcsId"))); System.out.println("==========="); }