ArrayList插入多个元素

时间:2016-12-01 10:03:24

标签: java arraylist vaadin

我是Vaadin和Java的新手,我正在解决以下问题:

在下面的代码中,我想在 ArrayList“newlist”中添加多个元素。如您所见,名为“ps”的元素有5个子元素。

问题是在ArrayList中添加的当前(in-the-loop)元素正在替换每个索引中的所有先前元素,因此最终它只返回最后一个“ps”元素,多次因为循环发生了。

enter image description here

如何将每个“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++                     
                 }

1 个答案:

答案 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