使用Apache Velocity中的foreach循环反向打印

时间:2016-06-27 07:31:01

标签: java while-loop velocity

我使用以下单个类实例的树状数据结构:

class Human {
  String name;
  Human parent;
  Human[] children;
}

如果我们考虑某个实例A,它有它的父Human实例以及它的子实例的数组。

ROOT
 |- A
 |  |-A1
 |  |  |-A1_1
 |  |  |-A1_2
 |  |-A2
 |    
 | 
 |- B

所以我得到了一个叶节点(例如:A1_2),我想从Root节点打印它的所有父节点。

例如:

ROOT > A > A2

我们可以在Java中使用while循环执行相同操作,直到parent!=null。 (但它会以相反的顺序打印出来,所以需要一些额外的努力来反转它)

我的问题是,

  • 如何在速度上使用foreach来实现这一目标?
  • 保留祖先名单,这是最好的方法吗?

修改

如果我添加一个新字段来保留祖先,我可以将其设置为下方,并可以向任何方向打印:

class Human {
  String name;
  Human parent;
  Human[] children;
  Human[] ancestors;

  // getters and setters 
}

public static void printTree(Human h){
    List<Human> ancestors = new ArrayList<Human>();
    Human parent = h.getParent();
    while (parent!=null) {
        ancestors.add(parent);
        parent = parent.getParent();
    }
    h.setAncestors(ancestors.toArray(new Human[ancestors.size()]));
    printUsingVelocity(h);
}

0 个答案:

没有答案