TreeNode.java 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package org.ssssssss.magicapi.model;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.function.Function;
  5. public class TreeNode<T> {
  6. private T node;
  7. private List<TreeNode<T>> children = new ArrayList<>();
  8. public TreeNode() {
  9. }
  10. public TreeNode(T node) {
  11. this.node = node;
  12. }
  13. public T getNode() {
  14. return node;
  15. }
  16. public void setNode(T node) {
  17. this.node = node;
  18. }
  19. public List<TreeNode<T>> getChildren() {
  20. return children;
  21. }
  22. public void setChildren(List<TreeNode<T>> children) {
  23. this.children = children;
  24. }
  25. public TreeNode<T> findTreeNode(Function<T, Boolean> mapping){
  26. return findTreeNode(this.children, mapping);
  27. }
  28. private TreeNode<T> findTreeNode(List<TreeNode<T>> childs, Function<T, Boolean> mapping) {
  29. for (TreeNode<T> child : childs) {
  30. if (mapping.apply(child.getNode())) {
  31. return child;
  32. }
  33. TreeNode<T> node = findTreeNode(child.children, mapping);
  34. if(node != null){
  35. return node;
  36. }
  37. }
  38. return null;
  39. }
  40. public void moveTo(TreeNode<T> node) {
  41. node.children.add(this);
  42. }
  43. public List<T> flat() {
  44. return flat(this);
  45. }
  46. private List<T> flat(TreeNode<T> node) {
  47. List<T> result = new ArrayList<>();
  48. result.add(node.getNode());
  49. for (TreeNode<T> item : node.getChildren()) {
  50. result.addAll(flat(item));
  51. }
  52. return result;
  53. }
  54. }