在java中可以使用list实现复合模式吗?



我想实现一个复合模式,其中对象emp将被添加到tl,然后tl添加到pm。我的列表应该只包含pm对象,其余的对象按顺序存储在其中。

但是当我迭代并尝试打印它时,它只显示pm的值,而不显示其他两个对象的值。

在这里,在一个pm对象下我需要两个tl对象,在一个tl对象下我需要三个emp对象。

List<Entity> ls = new ArrayList<Entity>();
    Entity pm = new Entity();
    Entity tl = new Entity();
    Entity emp = new Entity();
    int i = 0, j = 0, k = 0;
    for (i = 1; i <= 3; i++) {
        emp = new Entity("Associate"  + i, "Salem", 7563214, 3);
        // ls.add(obj);
        for (j = 1; j <= 2; j++) {
            tl = new Entity("TL" + j, "Chennai", 4756921, 2);
            tl.adds(emp);
            // ls.add(obj);
            for (k = 1; k <= 3; k++) {
                pm = new Entity("PM"+ k, "Erode",  5693214, 1);
                pm.adds(tl);
                ls.add(pm);                 
            }
        }
    }

在这里,每个构造函数的最后一个值定义了级别。我的JSP中有一个按钮,关卡可以从这个按钮点击。

<div id="company" style="display:none">

点TL
Emp

此列表ls被传递给同一类中的另一个方法,该方法使用另一个列表根据级别从列表中检索值。

List<Entity> subset = new ArrayList<Entity>();
    for (Entity val : a) {

            if (val.getLevel()>=level) {
                subset.add(val);
            }
我的bean类是

公共类实体{

private String name;
private String dept;
private int phNum;
private int level;
private List<Entity> entityList;
public Entity(){}
public Entity(String name,String dept, int phNum,int level) {
    this.name = name;
    this.dept = dept;
    this.phNum = phNum;
    this.level = level;
    entityList = new ArrayList<Entity>();
}
public void adds(Entity e) {
    entityList.add(e);
 }
 public List<Entity> getEntityList(){
   return entityList;
 }

实现所需功能的一种优雅方法是如下所示实现toString()方法。您可能还想对其他字段使用append(),而不是用+连接字符串。这里我只是为了偷懒而复制了你的代码。你可以有
或添加到StringBuilder中的其他格式化标记,以便很好地格式化打印的数据。

public String toString(){
      StringBuilder stringRep = new StringBuilder().append(" Name : " + name + ", dept : " + dept + ", ph num :" + phNum+" ");
      for(Entity subEntity:entityList){
          stringRep.append(subEntity.toString());
      }
      return stringRep.toString();  
}

最新更新