2016-04-14 94 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) 
...