java - 为什么它只添加数组列表的最后一个元素?或可能的解决方案?

标签 java

在第一个循环中,我循环遍历变量 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/

相关文章:

JavaFX - 可重用的 FXML 组件

java - 有没有办法将 JSR303 注释添加到 cxf 生成的类中?

java - 无法在 Catalina 上设置 JAVA_HOME

使用两个版本的 Eclipse 进行 Java 编译

java - 带有 ListView 和按钮的 Android 布局

java - 是否有 @FXML 初始化的对应物?

java - 在单个 nio 选择器中并行写入/读取

java - 这段代码在 Java 中有效吗?

java - 多个环境的单独属性文件

java - 如何在 MSWord 中使用 Intent