2016-12-01 13 views
0

: Ich bin in Vaadin und Java und ich zu tun habe das Problem unter:Arraylist Einfügen mehrerer Elemente

Im folgenden Code, ich möchte mehrere Elemente in der Arraylist „newlist“ hinzuzufügen. Wie Sie sehen können, haben die Elemente mit dem Namen "ps" 5 Unterelemente.

Das Problem ist, dass das aktuelle (in der Schleife) Element, das in der ArrayList hinzugefügt wird, alle vorherigen in jedem Index ersetzt und als Ergebnis am Ende nur das letzte "ps" -Element zurückgibt, so viele Zeiten wie die Schleife aufgetreten ist.

enter image description here

Wie kann ich speichern jedes "ps" Element in den verschiedenen Indizes?

Und der Code:

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

Setzen Sie 'PS_SECTION ps = new PS_SECTION();' in Ihre for-Schleife. Außerdem sollten Sie Klassennamen nicht vollständig in Großbuchstaben eingeben. "PsSection" würde den Java-Namenskonventionen entsprechen. –

+1

Um zu erklären, was _911DidBush_ sagte, müssen Sie eine neue Instanz von 'PS_SECTION' in Ihrer Schleife erstellen, hier aktualisieren Sie die gleiche Instanz' ps' und fügen sie immer wieder hinzu – AxelH

+0

danke! das hat geholfen! – natso

Antwort

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++      
       } 

Versuchen Sie, Ihre Instanziierung innerhalb der loop setzen, bevor Sie die Werte einstellen. wie der Code oben.

Der Grund, warum Sie PS_SECTION innerhalb der Schleife Instantiate ist ein neues instance diese objectPS_SECTION zu erstellen. Wenn Sie es außerhalb der loop instanziieren, erstellen Sie nur 1 Objekt, das in Ihrem loop verwendet werden soll. Das ist der Grund, warum alles, was Sie in Ihrem ArrayList hinzufügen, gleich objects ist.

+1

Versuchen Sie zu erklären, warum das nächste Mal ... da dies im Kommentar erklärt wird! – AxelH

+0

Ok sir @AxelH, ich werde bearbeiten und erklären. Danke übrigens. – msagala25

+0

@natso Ich habe es bearbeitet, und erklären, warum Sie es innerhalb der for-Schleife instanziieren müssen. Kredite an Sir AxelH. – msagala25