我是Vaadin和Java的新手,我正在解决以下问题:
在下面的代码中,我想在 ArrayList“newlist”中添加多个元素。如您所见,名为“ps”的元素有5个子元素。
问题是在ArrayList中添加的当前(in-the-loop)元素正在替换每个索引中的所有先前元素,因此最终它只返回最后一个“ps”元素,多次因为循环发生了。
如何将每个“ps”元素存储在不同的索引中?
代码:
Collection<?> itemIds = table.getItemIds();
Item item = null;
PS_SECTION ps = new PS_SECTION();
List<PS_SECTION> newlist = new ArrayList<PS_SECTION>();
int i = 0;
for(Object itemId : itemIds){
item = table.getItem(itemId);// row
Long s1 = (Long) item.getItemProperty("ID").getValue();
String s2 = item.getItemProperty("ΕΝΟΤΗΤΑ").getValue().toString();
Long s3 = (Long) item.getItemProperty("ΔΙΑΤΑΞΗ").getValue();
Long s4 = 0L;
Long s5 = 0L;
ps.setPS_SECTION(s1);
ps.setNAME(s2);
ps.setVORDER(s3);
ps.setISACTIVE(s4);
ps.setISGLOBAL(s5);
newlist.add(ps);
i++
}
答案 0 :(得分:2)
Collection<?> itemIds = table.getItemIds();
Item item = null;
PS_SECTION ps = null; // Declare first ps to null, because you will instantiate it later
List<PS_SECTION> newlist = new ArrayList<PS_SECTION>();
int i = 0;
for(Object itemId : itemIds){
item = table.getItem(itemId);// row
Long s1 = (Long) item.getItemProperty("ID").getValue();
String s2 = item.getItemProperty("ΕΝΟΤΗΤΑ").getValue().toString();
Long s3 = (Long) item.getItemProperty("ΔΙΑΤΑΞΗ").getValue();
Long s4 = 0L;
Long s5 = 0L;
ps = new PS_SECTION() // put it here your instantiation
ps.setPS_SECTION(s1);
ps.setNAME(s2);
ps.setVORDER(s3);
ps.setISACTIVE(s4);
ps.setISGLOBAL(s5);
newlist.add(ps);
i++
}
在设置值之前,尝试将实例化放在loop
内。像上面的代码一样。
您在循环中实例化PS_SECTION
的原因是要创建instance
object
的新PS_SECTION
。如果您在loop
之外实例化它,那么您只需创建一个要在loop
中使用的对象,这就是为什么您在{{1}中添加的所有内容}}是完全相同的ArrayList
。