Collection in einer Collection

Status
Nicht offen für weitere Antworten.

sorosch

Mitglied
Hallo

kann man folgendes machen:

folgende Bean:

Code:
public class DropDownElement {

	public int id = 0;
	public String value = null;
	public int idRef = 0;

//natürlich mit getter/setter-Methoden

}


Collections deklarieren:
Code:
Collection<Collection<DropDownElement>> collAll = new ArrayList<Collection<DropDownElement>>();
Collection<DropDownElement> coll1 = new ArrayList<DropDownElement>();
Collection<DropDownElement> coll2 = new ArrayList<DropDownElement>();
DropDownElement ebene1 = null;
DropDownElement ebene2 = null;

Dann fülle ich zuerst die beiden Collections coll1 und coll2:
Code:
while {
ebene1 = new DropDownElement();
ebene1.setId(resultSet.getInt("id"));
ebene1.setValue(resultSet.getString("value"));
coll1.add(ebene1);
}

while {
ebene2 = new DropDownElement();
ebene2.setId(resultSet.getInt("id"));
ebene2.setValue(resultSet.getString("value"));
coll2.add(ebene2);
}

Und füge die beiden Collections der Collection collAll hinzu und gebe diese zurück:

Code:
collAll.add(coll1);
collAll.add(coll2);
return collAll;


Soweit schauts meiner Meinung nach gut aus.

In einer anderen Klasse mache ich folgendes:
Code:
private static Collection<Collection<DropDownElement>> myCollAll;

//hole mir die Collection
myCollAll = DropDownSearchDAO.getAllDropDowns();


//Möchte mit dieser Methode die Werte einer Collection zurückgeben
    	public Collection getAllValues(int ebene) {

		Collection coll = new ArrayList<DropDownElement>();
		Iterator it = collAll.iterator();
		int i = 1;

		while (it.hasNext()) {
			if (i == ebene) {

				coll = (Collection) it.next();
				
			}
    i++;
		}

		return coll;

	}
Nur das erzeugt eine Endlosschleife:
while (it.hasNext())

Die Frage ist nur warum? Wo ist hier der Denkfehler? Oder kann man ganz einfach keine Collection in eine andere Collection einfügen?

Vielen Dank
cu
George
 
Nach dem
Code:
coll = (Collection) it.next();
fehlt wohl ein break.

Aber definiere colAll doch als List<Collection<DropDownElement>>, dann kannst du direkt mit dem Ebenen-Index (0-basiert!) in die Liste greifen und sparst die die Schleife.
 
Ich denke du hast das Systemlayout nicht besonderst gut durchdacht.

Es sollte eine Klasse geben die das Dropdownmenu beschreibt und eine Klasse die das Dropdownelement beschreibt.

So brauchst du nur 1 Collection mit dem Dropdownmenu um mehrere Menus zusammenzufassen.

Dropdownmenu hat wiederum eine Collection mit Dropdownelementen.
 
Vielen Dank euch beiden.

Ich habe collAll als List<Collection<DropDownElement>> definiert - und es geht🙂

Aber wieso soll man ein break bei while (it.hasNext()) brauchen? Habe ich noch nicht gesehen.

Das Systemlayout wird hoffentlich passen🙂 Kann man sicher auch so machen, wie du das beschrieben hast.
 
sorosch hat gesagt.:
Aber wieso soll man ein break bei while (it.hasNext()) brauchen? Habe ich noch nicht gesehen.

Weil du it.next () nur aufrufst, wenn i == ebene ist. Wenn i ungleich ebene ist, dann wird im Schleifenkörper eben kein it.next() gemacht; der Iterator bleibt also unverändert, so dass es keine Grund gibt, warum it.hasNext() im nächsten Durchlauf nicht immer noch true liefern sollte. Und wenn i bereits grösser ist als ebene, dann wird sich das auch nicht mehr ändern -> das ist die von dir beobachtete Endlosschleife.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben