
top.zeimao77.product.tree.TreeUtil Maven / Gradle / Ivy
package top.zeimao77.product.tree;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public class TreeUtil {
/**
* 列表转森林数据结构
* @param lines 节点列表
* @param fun 将一个行节点为转为树节点的方法
* @return
*/
public static List createTree(List lines, Function fun) {
List tree = new ArrayList<>();
for (Iterator iterator = lines.iterator(); iterator.hasNext();) {
T line = iterator.next();
if("0".equals(line.__getParentId())) {
W treeNode = fun.apply(line);
tree.add(treeNode);
iterator.remove();
}
}
for (TreeNode treeNode : tree) {
createChild(treeNode,lines,fun);
}
return tree;
}
private static void createChild(TreeNode treeNode, List lines, Function fun){
for (Iterator iterator = lines.iterator(); iterator.hasNext();) {
T line = iterator.next();
if(treeNode.__getNodeId().equals(line.__getParentId())) {
W tnode = fun.apply(line);
treeNode.addChild(tnode);
iterator.remove();
}
}
List childs = treeNode.childs();
if(childs != null && !childs.isEmpty()) {
for (TreeNode child : childs) {
createChild(child,lines,fun);
}
}
}
/**
* 遍历一个树
* @param node 树顶级节点
* @param con 树的消费者
* @param 节点
*/
public static void forTree(T node, Consumer con) {
List childs = node.childs();
if(childs != null && !childs.isEmpty()) {
for (T child : childs) {
forTree(child,con);
}
}
con.accept(node);
}
/**
* 对单树进行修剪,从叶子开始
* @param node 树节点
* @param pred 如果返回true节点将会被移除
*/
public static boolean trimTree(T node, Predicate pred) {
List childs = node.childs();
if(childs != null && !childs.isEmpty()) {
for(Iterator iterator = childs.iterator(); iterator.hasNext();) {
T next = iterator.next();
if(trimTree(next, pred)) {
iterator.remove();
}
}
}
return pred.test(node);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy