2016-04-14 10 views
0

Ursprünglich mit Arraylisten wie diese habe ich:Iterating eine Sammlung von Javabeans als Arraylist?

ArrayList<JavaBean> AllBeans = new ArrayList<JavaBean>(); 

Und ich bin in der Lage, durch sie zu durchlaufen und bekommen es so alle meine Bohnen zu drucken:

for (int i=0;i<AllBeans.size();i++){ 
      System.out.println(AllBeans.get(i).getCost()); 
     } 

Aber ich fand heraus, ich sollte dies tun:

Collection<JavaBean> AllBeans = new ArrayList<JavaBean>(); 

Aber wenn ich das tue, ich kann nicht mehr AllBeans.get (i) .getCost() tun, so I read on stackoverflow, and I apparently need to user an iterator. Aber ich verstehe nicht, was ich tue. Ich möchte die ursprünglichen Bean-Klassen verwenden können, aber ich kann nicht zu ihnen kommen. Ich möchte nur mein Bean.getCost() von meinem Bean-Objekt verwenden.

Das einzige, was ich bekommen konnte, war

Iterator itr = new AllBeans.Iterator(); 
     while (itr.hasNext()){ 
      System.out.println(itr.next().toString()) 
     } 

, die nicht zu meinem Objekt überhaupt nicht bekommen? Ich habe immer noch Probleme, abstrakt und Schnittstelle in Java zu verstehen.

+0

Was ist ein 'Woz'? Warum erwarten Sie, dass der Iterator eines neuen "Woz" etwas anderes als leer ist? –

+0

off Thema, aber Ihr Satz machte meinen Tag: _ Aber ich verstehe nicht, was ich tue: – Patrick

+1

'Iterator itr = AllBeans.Iterator();'. –

Antwort

1

einen Iterator verwenden können Sie Ihr Objekt

Collection<JavaBean> AllBeans = new ArrayList<JavaBean>(); 
Iterator<JavaBean> itr = AllBeans.iterator(); 
while (itr.hasNext()) { 
    System.out.println(itr.next().getCost()); 
} 

zu bekommen Wenn Sie gerade Iterator itr statt Iterator<JavaBean> itr verwenden dann Sie müssen das von itr.next(); zurückgegebene Objekt

umwandeln
1
Collection<JavaBean> AllBeans = new ArrayList<JavaBean>(); 
AllBeans.get(i).getCost(); 

Es funktioniert nicht, weil AllBeans eine Variable vom Typ ist Collection, die nicht get Methode hat. Sie können

List<JavaBean> AllBeans = new ArrayList<JavaBean>(); 
AllBeans.get(i).getCost(); 

Referenzen verwenden:

java.util.Collection: https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html

1

Sie müssen dies tun, weil Collection keinen Index hat während List hat. Iterator ist auch Generika, so dass Sie es wie folgt verwenden können:

Iterator<JavaBean> itr = AllBeans.iterator(); 
while (itr.hasNext()){ 
    System.out.println(itr.next().getCost()); 
} 

Die einfachere Möglichkeit für Schleife die verbesserte zu verwenden ist (auch bekannt als foreach-Schleife)

for (JavaBean bean : AllBeans){ 
    System.out.println(bean.getCost()); 
} 
1

Verwenden foreach Java-Anweisung

List<JavaBean> allBeans = new ArrayList<JavaBean>(); 
... 
for (JavaBean bean: allBeans) { 
    System.out.println(bean.getCost()); 
} 

Verwenden Sie auch die Java-Identifizierungskonvention: Verwenden Sie kein Großbuchstaben für das erste Identifizierungszeichen. Verwenden Sie CamelCase Konvention.

Wenn Sie Java 8 die Aussage sein kann, noch einfacher und flexible

... 
allBeans.stream() 
    .map(bean -> bean.getCost()) 
    .forEach(System.out::println) 
...