亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

樹工具類

張軍 3142 0
package zj.tree.util;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import zj.java.util.JavaUtil;
import zj.reflect.util.FieldUtil;

/**
 * 類名 :TreeUtil<br>
 * 概況 :樹工具類<br>
 * 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link  <a target=_blank href="http://m.eyofj.com">張軍個人網站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
 */
public class TreeUtil implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 回調取機構父對象
	 * 
	 * @param p_entity
	 * @param p_coll
	 */
	@SuppressWarnings("unchecked")
	public static <T> void callPentity(T p_entity, List<T> p_coll, String p_pentityName){
		if (p_entity == null)
			return;
		p_coll.add(p_entity);
		Object objEntity = null;
		try {
			objEntity = FieldUtil.get(p_entity, p_pentityName, true);
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (objEntity==null){
			return;
		}
		callPentity((T) objEntity, p_coll, p_pentityName);
	}

	/**
	 * 取得樹路徑
	 * 
	 * @param p_entity
	 */
	public static <T> String entityTextJoin(T p_entity, String text, String p_pentityName){
		return entityTextJoin(p_entity, text, p_pentityName, "\\");
	}

	/**
	 * 取得樹路徑
	 * 
	 * @param p_entity
	 */
	public static <T> String entityTextJoin(T p_entity, String text, String p_pentityName, String split) {
		List<T> coll = new ArrayList<T>();
		callPentity(p_entity, coll, p_pentityName);
		StringBuffer textJoin = new StringBuffer(200);
		for (int i = coll.size() - 1; i >= 0; i--) {
			T entity = coll.get(i);
			if (!"".equals(textJoin.toString())) {
				textJoin.append(split);
			}
			Object objText = null;
			try {
				objText = FieldUtil.get(entity, text, true);
			} catch (Exception e) {
				e.printStackTrace();
			}
			textJoin.append(JavaUtil.objToStr(objText));
		}
		return textJoin.toString();
	}
}
package zj.tree.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import zj.reflect.util.FieldUtil;
/**
 * 類名 :TreeUtil<br>
 * 概況 :樹工具類<br>
 * 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link  <a target=_blank href="http://m.eyofj.com">張軍個人網站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
 */
public class TreeNode<T> implements Serializable {
	private static final long serialVersionUID = 1L;
	private String idName;
	private String pidName;
	private boolean isPidT;
	public TreeNode(String idName, String pidName) {
		this(idName, pidName, false);
	}
	public TreeNode(String idName, String pidName, boolean isPidT) {
		this.idName = idName;
		this.isPidT = isPidT;
		this.pidName = pidName;
	}
	/** 返回所有子節點的集合 **/
	private List<String> rtnListId = new ArrayList<String>();
	/** 返回所有子節點的集合 **/
	private List<T> rtnListNode = new ArrayList<T>();

	public List<String> getRtnListId() {
		return rtnListId;
	}

	public List<T> getRtnListNode() {
		return rtnListNode;
	}

	/**
	 * 根據父節點的ID獲取所有子節點
	 * 
	 * @param list
	 *            分類表
	 * @param id
	 *            傳入的父節點ID
	 * @return String
	 */
	public void setChildNodes(List<T> list, String id) throws Exception {
		setChildNodes(list, id, true);
	}

	/**
	 * 根據父節點的ID獲取所有子節點
	 * 
	 * @param list
	 *            分類表
	 * @param id
	 *            傳入的父節點ID
	 * @return String
	 */
	public void setChildNodes(List<T> list, String id, boolean self) throws Exception {
		if (list == null || list.size() == 0 || id == null || id.trim().equals(""))
			return;
		if (self)
			for (Iterator<T> iterator = list.iterator(); iterator.hasNext();) {
				T node = iterator.next();
				String nodeId = getIdFieldValue(node);
				if (id.equals(nodeId)) {
					rtnListId.add(nodeId);
					rtnListNode.add(node);
					break;
				}
			}
		for (Iterator<T> iterator = list.iterator(); iterator.hasNext();) {
			T node = iterator.next();
			String nodePid = getPidFieldValue(node);
			// 一、根據傳入的某個父節點ID,遍歷該父節點的所有子節點
			if (id.equals(nodePid)) {
				recursionFn(list, node);
			}
			// // 二、遍歷所有的父節點下的所有子節點
			// if ("".equals(node.getParentId())) {
			// recursionFn(list, node);
			// }
		}
	}

	/**
	 * 根據父節點的ID獲取所有子節點
	 * 
	 * @param list
	 *            分類表
	 * @param pid
	 *            傳入的父節點ID
	 * @return String
	 */
	public void setChildNodesPid(List<T> list, String pid) throws Exception {
		setChildNodesPid(list, pid, true);
	}

	/**
	 * 根據父節點的ID獲取所有子節點
	 * 
	 * @param list
	 *            分類表
	 * @param pid
	 *            傳入的父節點ID
	 * @param self
	 *            是否包含自己
	 * @return String
	 */
	public void setChildNodesPid(List<T> list, String pid, boolean self) throws Exception {
		/** 返回所有子節點的集合 **/
		List<String> rtnListIds = new ArrayList<String>();
		/** 返回所有子節點的集合 **/
		List<T> rtnListNodes = new ArrayList<T>();
		if (list == null || list.size() == 0 || pid == null || pid.trim().equals(""))
			return;
		for (Iterator<T> iterator = list.iterator(); iterator.hasNext();) {
			T node = iterator.next();
			String nodePId = getPidFieldValue(node);
			if ((pid == null && nodePId == null) || (pid != null && pid.equals(nodePId))) {
				rtnListId.clear();
				rtnListNode.clear();
				String nodeId = getIdFieldValue(node);
				setChildNodes(list, nodeId, self);
				rtnListIds.addAll(rtnListId);
				rtnListNodes.addAll(rtnListNode);
			}
		}
		rtnListId.clear();
		rtnListNode.clear();
		rtnListId.addAll(rtnListIds);
		rtnListNode.addAll(rtnListNodes);
	}

	/**
	 * 遞歸調用
	 * 
	 * @param list
	 * @param node
	 * @throws Exception
	 */
	private void recursionFn(List<T> list, T node) throws Exception {
		List<T> childList = getChildList(list, node);// 得到子節點列表
		String nodeId = getIdFieldValue(node);
		if (hasChild(list, node)) {// 判斷是否有子節點
			rtnListId.add(nodeId);
			rtnListNode.add(node);
			Iterator<T> it = childList.iterator();
			while (it.hasNext()) {
				T n = it.next();
				recursionFn(list, n);
			}
		} else {
			rtnListId.add(nodeId);
			rtnListNode.add(node);
		}
	}

	// 判斷是否有子節點
	public boolean hasChild(List<T> list, T node) throws Exception {
		return getChildList(list, node).size() > 0 ? true : false;
	}

	// 得到子節點列表
	public List<T> getChildList(List<T> list, T node) throws Exception {
		return getChildList(list, node, false);
	}

	// 得到子節點列表
	public List<T> getChildList(List<T> list, T node, boolean delChild) throws Exception {
		List<T> nodeList = new ArrayList<T>();
		List<T> newNodeList = new ArrayList<T>();
		newNodeList.addAll(list);
		Iterator<T> it = newNodeList.iterator();
		String nodeId = getIdFieldValue(node);
		while (it.hasNext()) {
			T n = (T) it.next();
			String nodePid = getPidFieldValue(n);
			if (nodeId.equals(nodePid)) {
				nodeList.add(n);
				if (delChild) {
					list.remove(n);
				}
			}
		}
		return nodeList;
	}

	// 得到子節點列表
	public List<T> getChildList(List<T> list, String id) throws Exception {
		return getChildList(list, id, false);
	}

	// 得到子節點列表
	public List<T> getChildList(List<T> list, String id, boolean delChild) throws Exception {
		List<T> nodeList = new ArrayList<T>();
		Iterator<T> it = list.iterator();
		while (it.hasNext()) {
			T n = (T) it.next();
			String nodeId = getIdFieldValue(n);
			if (nodeId.equals(id)) {
				return getChildList(list, n, delChild);
			}
		}
		return nodeList;
	}

	/**
	 * 轉對象為字符串
	 * 
	 * @param o
	 * @return
	 */
	private String objToStr(Object o) {
		return o == null ? "" : String.valueOf(o);
	}

	/**
	 * 獲取屬性值ID
	 * 
	 * @param t
	 * @param fieldName
	 * @return
	 * @throws Exception
	 */
	private String getIdFieldValue(T t) throws Exception {
		return objToStr(FieldUtil.get(t, this.idName, true));
	}

	/**
	 * 獲取屬性值PID
	 * 
	 * @param t
	 * @param fieldName
	 * @return
	 * @throws Exception
	 */
	private String getPidFieldValue(T t) throws Exception {
		Object o = FieldUtil.get(t, this.pidName, true);
		if (this.isPidT) {
			if (o == null)
				return "";
			return objToStr(FieldUtil.get(o, this.idName, true));
		} else {
			return objToStr(o);
		}
	}

}



更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产丝袜啪啪 | 欧美一区二区三区在线可观看 | 5566中文字幕亚洲精品 | 97精品高清一区二区三区 | 美女日日日 | 欧美特级一级毛片 | 国产成年女一区二区三区 | 不卡猪| 玖玖精品国产 | 在线 色 | 神马不卡| 99热这里只有精品国产动漫 | 欧美成人小视频 | 欧美日韩生活片 | 日韩精品一区二区三区中文精品 | 午夜性a一级毛片 | 午夜影院免费体验区 | 久久久免费观成人影院 | 国产精品一区三区 | 欧美特级特黄a大片免费 | 日韩成人在线网站 | 综合色亚洲 | 国产二三区 | 高清波多野结衣一区二区三区 | 欧美很很干| 亚洲日韩精品欧美一区二区 | 黄频免费观看 | 色综合欧美色综合七久久 | 老司机午夜视频在线观看 | 黄页网址大全免费观看美女 | 99视频精品全国在线观看 | 五月婷亚洲 | 成人日b视频 | 亚洲综合色在线观看 | 色爱区综合激情五月综合色 | 亚洲国产人成在线观看 | 国产综合亚洲欧美日韩一区二区 | 日本一线一区二区三区免费视频 | 亚洲日本视频在线观看 | 国产福利视频网站 | 日韩激情中文字幕一区二区 |