2016-04-14 74 views
0

本來我一直在使用的ArrayList是這樣的:將Javabeans的集合作爲一個數組列表來迭代?

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

而且我能來遍歷它並把它打印所有我的豆是這樣的:

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

但我發現我應該這樣做:

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

但如果我這樣做,我不再能做到AllBeans.get(I).getCost(),so I read on stackoverflow, and I apparently need to user an iterator。但是,我不明白我在做什麼。我想能夠使用原始的bean類,但我無法得到它們?我只想從我的bean對象中使用我的bean.getCost()。

我能得到的唯一的事情就是

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

這並不讓我的對象呢?我仍然無法理解java中的抽象和接口。

+0

什麼是「woz」?你爲什麼期望新的'woz'的迭代器不是空的? –

+0

脫離主題,但你的句子使我的一天:_But,我不明白我在做什麼: – Patrick

+1

'迭代器 itr = AllBeans.Iterator();'。 –

回答

1

使用迭代器,你可以得到你的對象

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

如果您使用的只是Iterator itr代替Iterator<JavaBean> itr然後你需要投下的物品返回itr.next();

Iterator it = AllBeans.iterator(); 
while (it.hasNext()) { 
    JavaBean bean = (JavaBean)it.next(); 
    System.out.println(bean.getCost()); 
} 
1

你必須這樣做,因爲Collection沒有索引,而List了。 Iterator也是通用的,因此你可以使用它像這樣:

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

更簡單的方法是使用增強的for循環(又名for-each循環)

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

使用foreach的Java語句

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

也使用Java識別約定:不要使用大寫字母作爲第一個識別字符。使用CamelCase約定。

如果使用的Java 8的聲明可能會更簡單和flexible

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