在第一个循环中,我循环遍历变量 rgname,它是 [每月、每季度、每年]。现在,我创建了另一个名为 listDir 的方法。如果我在此处传递变量值folder = new File(reportFolderPath + reportPath + "/"+ rgname);稍后,listDir 方法将返回数组列表,如下所示。
List<ReportGroup> reportGroupList = new ArrayList<ReportGroup>();
for (String rgname : reportGroupNames) {
ReportGroup rg = new ReportGroup();
rg.setReportGroupName(rgname);// Report Name such as
// Monthly,Quarterly and
// Yearly
folder = new File(reportFolderPath + reportPath + "/"+ rgname);
List<ReportInfo> reportList = new ArrayList<ReportInfo>();
List<String> reportDescription=listDir(folder);
for(String reportDescr:reportDescription){
System.out.println("*****************Test***************" +reportDescr);
rg.setReportDescr(reportDescr);
}
rg.setReportList(reportList);
reportGroupList.add(rg);
report.setReportGroupList(reportGroupList);
}
}
第二个方法返回数组列表:
public static List<String> listDir(final File folder) {
List<String> dirArray = new ArrayList<String>();
for (final File fi : folder.listFiles()) {
if (fi.isDirectory()) {
dirArray.add(fi.getName());
}
}
return dirArray;
}
输出应该是这样的:
Monthly
-Jan
-Feb
-Continue
Quarterly
-First Quarter
-Second continue
第二个方法返回此值,这就是它在执行 System.out.println(reportDescription); 时打印的内容
[539_January_2013, 540_February_2013, 541_March_2013, 542_April_2013, 543_May_2013, 544_June_2013, 545_July_2013, 546_August_2013, 547_September_2013, 548_October_2013, 549_November_2013, 550_December_2013, 587_January_2014]
[551_First_Quarter_2013, 554_Second_Quarter_2013, 557_Third_Quarter_2013, 560_Fourth_Quarter_2013]
[123_Year_2010]
最佳答案
如 chat 中所示,有问题的行是这样的:
rg.setReportDescr(reportDescr);
正如我之前在评论中假设的那样,这是一种标准的 setter 方法,它将用新数据覆盖旧数据。因此最后剩余的数据是列表的最后一个元素:
public void setReportDescr(String reportDescr) {
this.reportDescr = reportDescr;
}
解决此问题的一个简单方法是将整个列表传递给 ReportGroup
实例:
List<String> reportDescriptions=listDir(folder);
rg.setReportDescriptions(reportDescriptions); // changed method name a bit
rg.setReportList(reportList);
reportGroupList.add(rg);
在类 ReportGroup
中,行 String reportDescr;
应更改为:
List<String> reportDescr;
并且 getter 和 setter 方法应该相应更改:
public List<String> getReportDescriptions() { // changed method name a bit
return reportDescr;
}
public void setReportDescriptions(List<String> reportDescr) { // changed method name a bit
this.reportDescr = reportDescr;
}
关于java - 为什么它只添加数组列表的最后一个元素?或可能的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135488/