在迭代中添加ArrayList中的对象

时间:2013-09-04 15:44:28

标签: java collections arraylist

好的,我不知道为什么,但我想我错过了一些非常基本的东西来解决这个问题。 这是我的问题: 我有一个方法createPublisherRequestObject(String str),它接受字符串参数并返回ReportRequest对象的List。通常,对于给定的String,将创建65个对象。我有另一个方法getTimeFrameValues()返回字符串的arraylist。通常这种方法会在arraylist中返回大约15个字符串。 所以基本上我会在循环中迭代15次(Num of String),然后对于每次迭代,我将调用方法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

请帮助!!!

谢谢, PRATIK

5 个答案:

答案 0 :(得分:4)

每次浏览列表时,您都替换 reqList。您似乎想要做的是reqList.addreqList.addAll

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

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

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

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

答案 1 :(得分:2)

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

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

应该工作。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

String string = (String) iterator.next();
reqList = rj.createPublisherRequestObject(string);

此处您将结果从rj.createPublisherRequestObject(String)分配到reqList,因此在尝试结束时您将获得最后一次重复的值。

而是使用reqList.addAll(rj.createPublisherRequestObject(string));继续将结果list添加到reqList,最后您拥有所有价值。

答案 4 :(得分:0)

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