package org.ssssssss.magicapi.model; import java.util.ArrayList; import java.util.List; import java.util.function.Function; public class TreeNode { private T node; private List> children = new ArrayList<>(); public TreeNode() { } public TreeNode(T node) { this.node = node; } public T getNode() { return node; } public void setNode(T node) { this.node = node; } public List> getChildren() { return children; } public void setChildren(List> children) { this.children = children; } public TreeNode findTreeNode(Function mapping){ return findTreeNode(this.children, mapping); } private TreeNode findTreeNode(List> childs, Function mapping) { for (TreeNode child : childs) { if (mapping.apply(child.getNode())) { return child; } TreeNode node = findTreeNode(child.children, mapping); if(node != null){ return node; } } return null; } public void moveTo(TreeNode node) { node.children.add(this); } public List flat() { return flat(this); } private List flat(TreeNode node) { List result = new ArrayList<>(); result.add(node.getNode()); for (TreeNode item : node.getChildren()) { result.addAll(flat(item)); } return result; } }