Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
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?
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.
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.