# Wie kann ich auf Object meiner Collection zugreifen



## wiegia086 (10. Okt 2009)

Hil Leute,

ich ärgere mich seit einigen Stunden mit folgenden Code Teil ab.


```
Collection<User> users = service.listUsers();
		Iterator iter = users.iterator();
		int i =0;

		while(iter.hasNext()){
			Object u = iter.hasNext();
			User us = (User) u;

			System.out.println(us.getFirstname());
		}
```

Die methode listUsers gibt liefert mir aus der Datenbank alle Objekte in form einer Collection.

Ich weiß aber nicht wie ich nun aus der collection meine einzelnen Objekte addressieren kann..

Wäre super wenn mir jemand dabei einen hinweis geben könnte. 

Danke, 
mfg andi


----------



## Final_Striker (10. Okt 2009)

was meinst du genau mit adressieren?


----------



## wiegia086 (10. Okt 2009)

damit meine ich den zugriff auf meine objekte die in der Collection gespeichert sind.

ich auf diese nicht zugreifen. 

Die Collection kann ich nur zur einem Array mit dem Datentyp Obejct übergeben , aber nicht in ein Array mit dem Datentyp User


----------



## maki (10. Okt 2009)

zB. mit einem Iterator

Trail: Collections (The Java™ Tutorials)


----------



## eRaaaa (10. Okt 2009)

maki hat gesagt.:


> zB. mit einem Iterator
> 
> Trail: Collections (The Java™ Tutorials)



na das macht er ja. allerdings hast du da einen fehler beim iterieren

```
Object u = iter.hasNext();
```
...hasNext() gibt dir halt ein boolean zurück und nicht das objekt.
probiers mal mit iter.next();

kleiner tipp, du kannst dir das ganze rumgecaste auch beim iterator sparen

```
Iterator<User> iter = users.iterator();
        while(iter.hasNext()){
      System.out.println(iter.next().getFirstname());
        }
```


----------



## Marco13 (10. Okt 2009)

Falls du das meintest: Sowas wie

```
Collection<Thing> collection = ... 
Thing thingWithIndex3 = collection.[i]get(3)[/i];
```
gibt es nicht. Man kann bei einer Collection nicht direkt auf ein bestimmtes Element zugreifen. Eine Collection ist dazu zu allgemein. Eine Collection kann z.B. ein "Set" sein, in dem die Elemente keine bestimmte Reihenfolge haben. Ein direkter (indizierter) Zugriff ist nur bei einer List möglich.

Aber ich glaube, das meintest zu nicht... !? :bahnhof:


----------



## 0x7F800000 (10. Okt 2009)

bzw. du könntest sogar direkt beim Aufruf von [c]service.listUsers()[/c] alles direkt in eine ArrayList rüberkopieren, und dann indiziert darauf zugreifen, nur würde das (aus genau dem Grund, den Marco13 genannt hat) keinen Sinn machen, weil man nicht damit rechnen kann, dass die Elemente in irgendeiner sinnvollen Reihenfolge sortiert geliefert werden, oder dass eine sinnvolle Reihenfolge überhaupt existiert.

Diesen Iterator-Murks mag ich nicht sonderlich, ohne guten Grund sollte man es imho nicht verwenden

=> Foreach wäre hier am angebrachtesten:

```
for(User u:service.listUsers()){
  //irgendwas mit dem User u machen...
}
```
sieht wesentlich kürzer aus, und so hat man auch keine Möglichkeit, sich ein zusätzliches mal in den Fuß zu schießen.


----------



## Landei (10. Okt 2009)

0x7F800000 hat gesagt.:


> Diesen Iterator-Murks mag ich nicht sonderlich, ohne guten Grund sollte man es imho nicht verwenden
> 
> => Foreach wäre hier am angebrachtesten:
> 
> ...



Amen!


----------

