Class HTree

java.lang.Object
xyz.cofe.coll.im.HTree

public class HTree extends Object
Обход и обновление гетерогенных деревьев (record)

Работает со следующими вложенными структурами:

  • record
  • ImList
  • Optional

Системное свойство: HTree.visitorCacheEnabled, по умолчанию false - указывает, кешировать или нет информацию о методах визитера

В общем случае выглядит так

 HTree.visit(root, new Object() {
     // обновление конкретного типа узла
     NodeB node(NodeB n) {
         return new NodeB(n.a + n.a);
     }

     // обновление обобщенного типа узла
     Node node2(Node n) {
         if (n instanceof NodeC nc && nc.b==4) {
             return new NodeC(44, nc.c);
         }
         return n;
     }

     // вход в узел
     void enter(ImList<Nest.PathNode> path) {
         System.out.println("enter " + ">>> ".repeat(path.size()) + path.head().get());
     }

     // выход из узла
     void show(ImList<Nest.PathNode> path) {
         System.out.println("exit  " + ">>> ".repeat(path.size()) + path.head().get());
     }
 })
 
  • Constructor Details

    • HTree

      public HTree()
  • Method Details

    • visit

      public static <A> A visit(A root, Object visitor)
      Обход дерева и обновление узлов
      Type Parameters:
      A - тип дерева
      Parameters:
      root - корень дерева
      visitor - объект для посещения и обновления узлов NodeVisitor
      Returns:
      обновленное или старое дерево