首页>代码>fastjson实现json比较>/fastjson/src/com/os4j/utils/FastjsonArrayUtils.java
package com.os4j.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class FastjsonArrayUtils extends FastjsonUtils {
	
	private List<Object> insertList;
    private List<Object> deleteList;
    private List<Object> updateList;

    public FastjsonArrayUtils() {
      insertList = new ArrayList<Object>();
      deleteList = new ArrayList<Object>();
      updateList = new ArrayList<Object>();
    }
    
	public Map<String, Object> compartr(Map<String, Object> map, String key, JSONArray ja1, JSONArray ja2) {
		List<Object> cl1;
		List<Object> cl2;
		String className,id;
		if ("creditLine".equals(key)){
			clear();
			id = "id";
			className = "com.os4j.model.CreditLine";
		}else if ("materialList".equals(key)){
			clear();
			className = "com.os4j.model.MaterialCompart";
			id = "materialId";
		} else if ("attributeList".equals(key)){
			clear();
			className = "com.os4j.model.AttributeValueDTO";
			id = "attributeDefinitionId";
		} else {
			return map;
		}
		Class clazz = super.getClassByName(className);
		cl1 = super.JSONArray2JavaList(ja1,clazz);
		cl2 = super.JSONArray2JavaList(ja2,clazz); 
		compartr(cl1, cl2);
		Map<String,Object> tmap = new TreeMap<String,Object>();
		if(!insertList.isEmpty())
			tmap.put("insert", super.list2JSONArray(insertList));
		if(!deleteList.isEmpty())
			tmap.put("delete", super.list2JSONArray(deleteList));
		cl1.retainAll(updateList);
		cl2.retainAll(updateList);
		Map cmap = new TreeMap();
		for (Object c : cl1) {
			Object cl = cl2.get(cl2.indexOf(c));
			Map<String,Object> pmap = new TreeMap<String,Object>();
			super.compartr(pmap, super.java2JSONOject(c), super.java2JSONOject(cl));
			JSONObject json = super.java2JSONOject(cl);
			if(!pmap.isEmpty())
				cmap.put(json.get(id), pmap);
		}
		if(!cmap.isEmpty())
			tmap.put("update", cmap);
		if(!tmap.isEmpty())
			map.put(key, tmap);
		return map;
	}
	
	public void clear(){
		insertList.clear();
		deleteList.clear();
		updateList.clear();
	}
	
	public void compartr(List<Object> l1,List<Object> l2){
		if (l1 == null && l2 == null)
	      return;
	    // 全部删除
	    if (l2.isEmpty()) {
	    	deleteList = l1;
	    	return;
	    }
	    // 全部新增
	    if (l1.isEmpty()) {
	    	insertList = l2;
	    	return;
	    }
	    // 有新增+更新+删除
	    for (Object obj : l2) {
	      // 更新的
	      if (l1.contains(obj))
	    	  updateList.add(obj);
	      else
	    	  insertList.add(obj);// 新增的
	    }
	    // 要删的
	    for (Object obj : l1)
	      if (!l2.contains(obj))
	    	  deleteList.add(obj);
	}
}
最近下载更多
JinghanHe  LV8 2020年2月24日
ldc199375  LV10 2019年10月31日
kenpfang  LV18 2019年10月7日
走掉的旋律  LV8 2018年7月15日
最近浏览更多
hxhufo008  LV3 2020年9月21日
zdm_ziming  LV1 2020年6月19日
wdeshijie  LV11 2020年6月12日
zdl638  LV6 2020年5月8日
JinghanHe  LV8 2020年2月24日
冰糖l葫芦  LV4 2019年12月27日
弹指又十年  LV8 2019年12月18日
1003480239  LV7 2019年12月11日
幻羽揚  LV4 2019年11月18日
梅西小王子  LV3 2019年11月17日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友