【问题标题】:Iterating a collection of Javabeans as an arraylist?将 Javabean 集合迭代为数组列表?
【发布时间】:2016-08-06 03:49:21
【问题描述】:

最初我一直在使用这样的数组列表:

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

我可以遍历它并让它像这样打印我所有的 bean:

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 中的抽象和接口。

【问题讨论】:

  • 什么是woz?为什么你期望新的woz 的迭代器不是空的?
  • 跑题了,但你的一句话让我很开心:_但是,我不明白我在做什么:
  • Iterator&lt;JavaBean&gt; itr = AllBeans.Iterator();.
  • @AndyTurner 正在重命名这个问题的变量以使其更有意义,但忘记重命名那个。将其修复为 AllBeans

标签: java


【解决方案1】:

使用foreachJava 语句

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)
...

【讨论】:

    【解决方案2】:

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

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

    如果您只使用Iterator itr 而不是Iterator&lt;JavaBean&gt; itr,那么您需要转换itr.next(); 返回的对象

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

    【讨论】:

      【解决方案3】:

      您需要这样做,因为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());
      }
      

      【讨论】:

        【解决方案4】:
        Collection<JavaBean> AllBeans = new ArrayList<JavaBean>();
        AllBeans.get(i).getCost();
        

        它不起作用,因为AllBeansCollection 类型的变量,它没有get 方法。你可以使用

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

        参考资料:

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

        【讨论】:

          猜你喜欢
          • 2014-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-10
          • 2022-12-31
          • 1970-01-01
          • 2014-03-25
          • 1970-01-01
          相关资源
          最近更新 更多