0

好的,我不知道为什么,但我想我缺少一些非常基本的东西来解决这个问题。这是我的问题:我有一个方法 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

请帮忙!!!

谢谢,普拉提克

4

5 回答 5

4

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

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

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

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

for(String string: timeList)
    reqList.addAll(rj.createPublisherRequestObject(string));
于 2013-09-04T15:47:42.040 回答
2

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

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

应该管用。

于 2013-09-04T15:48:17.120 回答
1

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

于 2013-09-04T15:48:28.293 回答
0
String string = (String) iterator.next();
reqList = rj.createPublisherRequestObject(string);

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

相反,使用reqList.addAll(rj.createPublisherRequestObject(string));which 将继续将结果添加listreqList,最后你拥有所有的价值。

于 2013-09-04T15:52:08.260 回答
0

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

于 2013-09-04T16:26:08.157 回答