java中List形的数据转JSON形的树

阅读更多

本段代码主要是一个工具。费话不多说,

注:代码中的一些常量值分别为:

public static final String NUM_ZERO = "0";
 public static final String NUM_ONE = "1";
 public static final String NUM_UNONE = "-1";

public static final String SYMB_MH = ":";

上代码

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

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;

/**
 * 使用说明:将List转换为Tree>
 * @author yshlin
 *
 */
public class ListMap2TreeUtils {

	private String id;		//主键
	private String text;	//名称
	private String iconCls;		//图标
	private boolean leaf;	//是否叶子
	private boolean expanded;	//是否展开
	private int sort;		//序号
	private boolean checked;	//是否选中
	private Map attributes;
	private List children;	//子节点

	public ListMap2TreeUtils() {
		super();
	}
	/*
	public ListMap2TreeUtils(String id, String text, String iconCls, boolean leaf,
			boolean expanded, Map attributes, List children) {
		super();
		this.id = id;
		this.text = text;
		this.iconCls = iconCls;
		this.leaf = leaf;
		this.expanded = expanded;
		this.children = children;
		this.attributes = attributes;
	}
	*/
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public String getIconCls() {
		return iconCls;
	}

	public void setIconCls(String iconCls) {
		this.iconCls = iconCls;
	}

	public boolean isLeaf() {
		return leaf;
	}

	public void setLeaf(boolean leaf) {
		this.leaf = leaf;
	}

	public boolean isExpanded() {
		return expanded;
	}

	public void setExpanded(boolean expanded) {
		this.expanded = expanded;
	}

	public List getChildren() {
		return children;
	}

	public void setChildren(List children) {
		this.children = children;
	}
	
	public int getSort() {
		return sort;
	}
	public void setSort(int sort) {
		this.sort = sort;
	}
	public boolean isChecked() {
		return checked;
	}
	public void setChecked(boolean checked) {
		this.checked = checked;
	}
	public Map getAttributes() {
		return attributes;
	}

	public void setAttributes(Map attributes) {
		this.attributes = attributes;
	}

	/**
	 * 带属性的List转JSON树
	 * [id, text, sjid, checked, iconCls, attributes{v1:v2:v3}, othermc...]
	 * 创建时间  
	 * 创建人 yshlin
	 * @param m2tList
	 * @param column
	 * @param rootName
	 * @return
	 *
	 */
	public static String getTreeJsonStringFull(final List> m2tList, 
			final String[] column, final String rootName) {
		if(column.length < 6){
			return "";
		}
		
		Map> arrayListMap = getArrayListMapFull(m2tList,column,rootName);
		return listToString(arrayListMap);
	}
	
	/**
	 * List转树的方法
	 * column = [id, mc, parentid]
	 * 创建时间 
	 * 创建人 yshlin
	 * 
	 * @param m2tList
	 * @param column
	 * @return
	 */
	public static String getTreeJsonString(final List> m2tList, 
			final String[] column, final String rootName) {
		if(column.length < 4){
			return "";
		}
		Map> arrayListMap = getArrayListMap(m2tList,column,rootName);
		return listToString(arrayListMap);
	}
	/**
	 * 生成层次形式的JSON
	 * 
	 * 创建时间 
	 * 创建人 yshlin
	 * @param arrayListMap
	 * @return
	 *
	 */
	private static String listToString(Map> arrayListMap){
		for (Map.Entry> entry : arrayListMap.entrySet()) {
			List smallTreeList = new ArrayList();
			smallTreeList = entry.getValue();
			int nodeListSize = smallTreeList.size();
			for (int i = 0; i < nodeListSize; i++) {
				String findID = smallTreeList.get(i).getId();
				List findList = arrayListMap.get(findID);
				smallTreeList.get(i).setChildren(findList);
			}
		}
		
		List rootNodeList = arrayListMap.get(ConstantUtil.NUM_UNONE);
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//自动为我排除circle。
		JSONArray jsonArray = JSONArray.fromObject(rootNodeList, jsonConfig);
		return jsonArray.toString();
	}
	/**
	 * List转map的方法
	 * column = [id, text, sjid, checked, othermc....]
	 * 创建时间 
	 * 创建人 yshlin
	 * 
	 * @param m2tList
	 * @param column
	 * @return
	 */
	private static Map> getArrayListMap(final List> m2tList, 
			final String[] column, final String rootName) {
		Map> arrayListMap = new HashMap>();
		List rootlist = new ArrayList();
		ListMap2TreeUtils root = new ListMap2TreeUtils();
		root.setId(ConstantUtil.NUM_ZERO);
		root.setText(rootName);
		rootlist.add(root);
		arrayListMap.put(ConstantUtil.NUM_UNONE, rootlist);
		for (int i=m2tList.size()-1;i>=0;i--) {
			Map e = m2tList.get(i);
			ListMap2TreeUtils e2t = new ListMap2TreeUtils();
			e2t.setId(e2t.getString(e, column[0]));
			String text = e2t.getString(e, column[1]);
			String check = column[3].equals("") ? ConstantUtil.NUM_ZERO : e2t.getString(e, column[3]);
			e2t.setChecked(check.equals("") || check.equals(ConstantUtil.NUM_ZERO) ? false : true);
			String textTmp = "";
			if(column.length > 4){
				textTmp = e2t.getOtherText(e, column, 4);
			}
			e2t.setText(text + (textTmp.equals("") ? "" : "[" + textTmp + "]"));
			String fatherId = e2t.getString(e, column[2]);
			if (arrayListMap.get(fatherId) == null) {
				List list = new ArrayList();
				list.add(e2t);
				arrayListMap.put(fatherId, list);
			} else {
				List valueList = arrayListMap.get(fatherId);
				valueList.add(e2t);
				arrayListMap.put(fatherId, valueList);
			}
		}
		return arrayListMap;
	}
	
	/**
	 * List转map的方法
	 * column = [id, mc, parentid]
	 * 创建时间 
	 * 创建人 yshlin
	 * 
	 * @param m2tList
	 * @param column
	 * @return
	 */
	private static Map> getArrayListMapFull(final List> m2tList, 
			final String[] column, final String rootName) {
		Map> arrayListMap = new HashMap>();
		List rootlist = new ArrayList();
		ListMap2TreeUtils root = new ListMap2TreeUtils();
		root.setId(ConstantUtil.NUM_ZERO);
		root.setText(rootName);
		rootlist.add(root);
		arrayListMap.put(ConstantUtil.NUM_UNONE, rootlist);
		for (int i=m2tList.size()-1;i>=0;i--) {
			Map e = m2tList.get(i);
			ListMap2TreeUtils e2t = new ListMap2TreeUtils();
			e2t.setId(e2t.getString(e, column[0]));//id
			String text = e2t.getString(e, column[1]);//text
			String check = column[3].equals("") ? ConstantUtil.NUM_ZERO : e2t.getString(e, column[3]);//checked
			e2t.setChecked(check.equals("") || check.equals(ConstantUtil.NUM_ZERO) ? false : true);
			//other text
			String textTmp = "";
			if(column.length > 6){
				textTmp = e2t.getOtherText(e, column, 6);
			}
			e2t.setText(text + (textTmp.equals("") ? "" : "[" + textTmp + "]"));
			e2t.setAttributes(e2t.getColumnAttributes(e, column[5]));
			String fatherId = e2t.getString(e, column[2]);
			if (arrayListMap.get(fatherId) == null) {
				List list = new ArrayList();
				list.add(e2t);
				arrayListMap.put(fatherId, list);
			} else {
				List valueList = arrayListMap.get(fatherId);
				valueList.add(e2t);
				arrayListMap.put(fatherId, valueList);
			}
		}
		return arrayListMap;
	}
	private Map getColumnAttributes(Map m, String attr){
		Map map = new HashMap();
		if(PatternUtil.isNull(attr).equals("")){
			return map;
		}
		String[] val = attr.split(ConstantUtil.SYMB_MH);
		for(int i=0;i m, String[] column, int start){
		String textTmp = "";
		for(int il=start;il m, String key){
		String tmp = String.valueOf(m.get(key));
		return PatternUtil.isNull(tmp);
	}
}

 

你可能感兴趣的:(工具,列表,JSON,树,层次)