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

樹(shù)工具類

張軍 3540 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>
 * 概況 :樹(shù)工具類<br>
 * 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link  <a target=_blank href="http://www.eyofj.com">張軍個(gè)人網(wǎng)站</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;

	/**
	 * 回調(diào)取機(jī)構(gòu)父對(duì)象
	 * 
	 * @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);
	}

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

	/**
	 * 取得樹(shù)路徑
	 * 
	 * @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>
 * 概況 :樹(shù)工具類<br>
 * 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link  <a target=_blank href="http://www.eyofj.com">張軍個(gè)人網(wǎng)站</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;
	}
	/** 返回所有子節(jié)點(diǎn)的集合 **/
	private List<String> rtnListId = new ArrayList<String>();
	/** 返回所有子節(jié)點(diǎn)的集合 **/
	private List<T> rtnListNode = new ArrayList<T>();

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

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

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

	/**
	 * 根據(jù)父節(jié)點(diǎn)的ID獲取所有子節(jié)點(diǎn)
	 * 
	 * @param list
	 *            分類表
	 * @param id
	 *            傳入的父節(jié)點(diǎn)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);
			// 一、根據(jù)傳入的某個(gè)父節(jié)點(diǎn)ID,遍歷該父節(jié)點(diǎn)的所有子節(jié)點(diǎn)
			if (id.equals(nodePid)) {
				recursionFn(list, node);
			}
			// // 二、遍歷所有的父節(jié)點(diǎn)下的所有子節(jié)點(diǎn)
			// if ("".equals(node.getParentId())) {
			// recursionFn(list, node);
			// }
		}
	}

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

	/**
	 * 根據(jù)父節(jié)點(diǎn)的ID獲取所有子節(jié)點(diǎn)
	 * 
	 * @param list
	 *            分類表
	 * @param pid
	 *            傳入的父節(jié)點(diǎn)ID
	 * @param self
	 *            是否包含自己
	 * @return String
	 */
	public void setChildNodesPid(List<T> list, String pid, boolean self) throws Exception {
		/** 返回所有子節(jié)點(diǎn)的集合 **/
		List<String> rtnListIds = new ArrayList<String>();
		/** 返回所有子節(jié)點(diǎn)的集合 **/
		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);
	}

	/**
	 * 遞歸調(diào)用
	 * 
	 * @param list
	 * @param node
	 * @throws Exception
	 */
	private void recursionFn(List<T> list, T node) throws Exception {
		List<T> childList = getChildList(list, node);// 得到子節(jié)點(diǎn)列表
		String nodeId = getIdFieldValue(node);
		if (hasChild(list, node)) {// 判斷是否有子節(jié)點(diǎn)
			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);
		}
	}

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

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

	// 得到子節(jié)點(diǎn)列表
	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;
	}

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

	// 得到子節(jié)點(diǎn)列表
	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;
	}

	/**
	 * 轉(zhuǎn)對(duì)象為字符串
	 * 
	 * @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);
		}
	}

}



更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美性久久久久 | 日本高清视频不卡 | 国产亚洲精品一区二区在线观看 | 久久国产香蕉一区精品 | 成人亚洲精品 | 久操综合 | 免费的成人a视频在线观看 免费的黄色网 | 狠狠综合久久综合网站 | 一级特黄aaaaaa大片 | 成人性色生活片免费看爆迷你毛片 | 牛牛影院免费永久地址 | 深夜成人在线 | 中文字幕亚洲综合久久2 | 水浒传删减剧情在线观看 | 亚洲精品久久久久综合中文字幕 | 2022色婷婷综合久久久 | 天天操夜夜欢 | 中文国产日韩欧美视频 | 免费福利入口在线观看 | 青青青手机视频 | 国产精品在线播放 | 人人爽天天碰天天躁夜夜躁 | 亚洲国产模特在线播放 | 久久激情五月 | 欧美极品妇xxxxxbbbbb | 亚洲日本人成网站在线观看 | 一级做人免费观看c欧美网站 | 国产草| 欧美专区一区二区三区 | 国产亚洲在线观看 | 爱爱小视频成人免费 | 美国黄色大片 | 国产亚洲自拍一区 | 日本亚洲欧洲免费无码 | 成人影院久久久久久影院 | 国产啪视频1000部免费视频 | 国产凹凸在线一区二区色老头 | 涩色涩| 成人免费www在线高清观看 | 亚洲精品国产福利一区二区三区 | 69精品久久久久 |