我想实现一个复合模式,其中对象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();
}