2016-12-01 10 views
0

Я новичок в Vaadin и Java, и я имею дело проблема ниже:ArrayList вставляя несколько элементов

В следующем коде, я хочу добавить несколько элементов в ArrayList «NewList». Как вы можете видеть, элементы с именем «ps» имеют 5 подэлементов.

Проблема в том, что текущий элемент (в цикле), добавленный в ArrayList, заменяет все предыдущие в каждом индексе, и в результате в конце он возвращает только последний элемент «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

положить 'PS_SECTION ps = новый PS_SECTION();' внутри цикла for. Также ... вы не должны указывать имена классов в Uppercase. «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 внутри цикла, чтобы создать новый instance этого objectPS_SECTION. Если вы создаете экземпляр за пределами loop, вы просто создаете 1 объект, который будет использоваться в вашем loop. Вот почему все, что вы добавили в свой ArrayList, все равно objects.

+1

Попробуйте объяснить, почему в следующий раз ... так как это объясняется в комментарии! – AxelH

+0

Ok sir @AxelH, я отредактирую и объясню. Спасибо, кстати. – msagala25

+0

@natso Я отредактировал его и объяснил, почему вам нужно создать его в цикле for. кредиты сэру AxelH. – msagala25