Map.clear()然后将地图添加到List

时间:2016-11-10 08:46:30

标签: java apache-poi

我尝试使用基于 jdk1.6 的poi.jar来遍历一些excel2007数据。但是当我似乎发现一个奇怪的现象时,我遍历行(由 HashMap存储) ())然后将行数据添加到java.util。 ArrayList

在启动下一个迭代器时,我首先通过调用Map.clear()来清除行数据,但是当再次调用ArrayList.add()方法时,此行数据将被覆盖旧数据。

   Map<String, String> cellForRow = = new HashMap<String, String>();
   List<Map<String, String>> rowForSheet = new ArrayList<Map<String, String>>();
   for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {

                    row = sheet.getRow(j);
                    if (j == 0) {// the first row is title
                        titleRow = row;
                        continue;
                    }
                    if (row != null && titleRow.getPhysicalNumberOfCells() > 0) {
                        // cellForRow = new HashMap<String, String>();
                        cellForRow.clear();
                        for (int k = 0; k < titleRow.getPhysicalNumberOfCells(); k++) {// cell
                            cellForRow.put(getCellValue(titleRow.getCell(k)), getCellValue(row.getCell(k)));
                        }
                    }
                    rowForSheet.add(cellForRow);
                }

Next Snippets显示 rowForSheet (列表)的调试日志

[{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream}]

以后的数据会覆盖旧数据

你呢?

1 个答案:

答案 0 :(得分:1)

首先,我会在地图中创建地图,以便每次都添加地图。

List<Map<String, String>> rowForSheet = new ArrayList<Map<String, String>>();
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {

   row = sheet.getRow(j);
   if (j == 0) {// the first row is title
      titleRow = row;
      continue;
   }
   Map<String, String> cellForRow = = new HashMap<String, String>();
   if (row != null && titleRow.getPhysicalNumberOfCells() > 0) {
       for (int k = 0; k < titleRow.getPhysicalNumberOfCells(); k++) {// cell
           cellForRow.put(
               getCellValue(titleRow.getCell(k)), 
               getCellValue(row.getCell(k))
           );
       }
   }
   rowForSheet.add(cellForRow);
}

现在,列表中的每个项目都是不同的地图,并添加了您添加的新数据。