2016-12-01 117 views
0

我在Vaadin和Java新我處理以下問題:ArrayList中插入多個元素

在下面的代碼,我想在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++      
       } 
+5

put'PS_SECTION ps = new PS_SECTION();'在for循環中。另外...你不應該完全用大寫給類名。 「PsSection」將符合java命名約定。 –

+1

爲了解釋_911DidBush_說的是什麼,你需要在你的循環中創建一個'PS_SECTION'的新實例,在這裏你正在更新同一個實例'ps'並且一次又一次地添加它 – AxelH

+0

謝謝!這有幫助! – natso

回答

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的原因是創建一個新的instanceobjectPS_SECTION。如果你在loop以外實例化它,你只需要創建一個對象用於你的loop,這就是爲什麼你在ArrayList中添加的所有對象都是一樣的objects

+1

試着解釋爲什麼下一次...因爲這是在評論中解釋! – AxelH

+0

好的,先生@AxelH,我會編輯和解釋。謝謝你的方式。 – msagala25

+0

@natso我編輯它,並解釋爲什麼你需要在for循環中實例化它。學分給先生AxelH。 – msagala25