【问题标题】:Adding objects in ArrayList in iteration在迭代中在 ArrayList 中添加对象
【发布时间】:2013-09-08 05:20:10
【问题描述】:

好的,我不知道为什么,但我想我缺少一些非常基本的东西来解决这个问题。 这是我的问题: 我有一个方法 createPublisherRequestObject(String str) 接受字符串参数并返回一个 ReportRequest 对象列表。通常对于给定的字符串,将创建 65 个对象。我有另一个方法 getTimeFrameValues() 返回字符串的arraylist。通常,此方法将在 arraylist 中返回大约 15 个字符串。 所以基本上我会在循环中迭代 15 次(字符串的数量),然后对于每次迭代,我将调用方法 createPublisherRequestObject 来创建 65 个对象。 最后,我想要一个 65*15 对象的列表。这是我的代码 -

ArrayList<String> timeList = er.getTimeFrameValues();
List<ReportRequest> reqList = new ArrayList<>();
for (Iterator iterator = timeList.iterator(); iterator.hasNext();) {
    String string = (String) iterator.next();
    reqList = rj.createPublisherRequestObject(string);
}
log.info("Final List Size "+reqList.size());

但这会返回 65

请帮忙!!!

谢谢, 实践

【问题讨论】:

  • 你为什么用这么复杂的for循环而不是写:for ( String string : timeList )?顺便说一句,字符串是一个糟糕的变量名......

标签: java collections arraylist


【解决方案1】:

每次浏览列表时,您都在替换 reqList。看来您想做的是reqList.addreqList.addAll

此外,如果您已经知道要为每个字符串创建多少个对象,则通过创建适当大小的 ArrayList 可以获得更好的性能:

new ArrayList<>(65 * timeList.size())

最后,既然您使用的是 Java 7,请继续使用增强的 for 循环;它更具可读性:

for(String string: timeList)
    reqList.addAll(rj.createPublisherRequestObject(string));

【讨论】:

  • @Marc 或者像 Jon Skeet 一样成为机器人。
【解决方案2】:

您在每次迭代时都重新分配给 reqList。你需要追加。

reqList.addAll(rj.createPublisherRequestObject(string));

应该可以。

【讨论】:

  • Cruncher,谢谢伙计。你是救世主。
【解决方案3】:

您有 65 个,因为您将 reqlist 替换为对 rj.createPublisherRequestObject(string) 的调用结果,而不是使用 addAll() 方法。所以你不添加元素,而是覆盖 reqlist 的内容。因此,最后列表被覆盖了 15 次,只包含 65 个元素...

【讨论】:

    【解决方案4】:
    String string = (String) iterator.next();
    reqList = rj.createPublisherRequestObject(string);
    

    在这里,您将从rj.createPublisherRequestObject(String) 获得的结果分配给reqList,因此在迭代结束时,您将获得最后一个reurned 值。

    改为使用reqList.addAll(rj.createPublisherRequestObject(string));,它将继续将结果list 添加到reqList,最终你拥有所有价值。

    【讨论】:

      【解决方案5】:

      你需要做 reqList.add(rj.createPublisherRequestObject(string)); 您没有添加这就是它返回最后一次迭代值的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 2018-03-22
        • 2021-07-31
        • 2021-09-26
        • 2016-07-20
        • 2013-10-29
        • 1970-01-01
        相关资源
        最近更新 更多