好的,我不知道为什么,但我想我错过了一些非常基本的东西来解决这个问题。 这是我的问题: 我有一个方法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
答案 0 :(得分:4)
每次浏览列表时,您都替换 reqList
。您似乎想要做的是reqList.add
或reqList.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(字符串)); 你没有添加这就是它返回最后一次迭代值的原因。