使用二维数组填充行和单元格时很困难

有一个HashMap:

HashMap<String, Object> matrix = new HashMap<String, Object>(); 

考虑到对象是一个ArrayList的数据:

 for (int i = 0; i < matrix.keySet().size() * 2; i += 2) { keyRow.createCell(i).setCellValue(matrix.keySet().toArray()[i / 2].toString()); for (int j = 5; j < (((ArrayList<String>) matrix.get(matrix.keySet().toArray()[i / 2].toString())).size() + 5); j++) { valueRow = worksheet.createRow((short) j); valueRow.createCell(i).setCellValue(((ArrayList<String>) matrix.get(matrix.keySet().toArray()[i / 2].toString())).toArray()[j - 5].toString()); } } 

正如你所看到的,外层循环使用HashMap的keySet()的string填充keyRow,同时在中间的一个空单元之后(它会增加2)。 内部循环应该填充每个键下的单元格,每个键都有相应的值(这是一个具有更多值的ArrayList,这就是为什么是另一个循环)。 除了APACHE POI worksheet.createRow()方法覆盖了以前的结果之外,它的工作方式非常漂亮,给出了只有一个键被正确填充的最终结果。

你有什么想法,我怎么能解决这个问题? 我非常感谢你。

你的代码是天真的; 学习正确使用Collections API,完整的genericstypes,Iterable for循环,以及toArray(),map的获取或缩短。

我build议你尝试一下:

 Map<String, ArrayList<String>> matrix = new HashMap<String, ArrayList<String>>(); int cell=0; int row=0; for (Map.Entry<String,Object> e : matrix.entrySet()) { worksheet.createRow(row++).createCell(cell).setCellValue(e.getKey()); Row valueRow = worksheet.createRow(row++); for (String v : e.getValue()) { valueRow.createCell(cell++).setCellValue(v); } } 

如果您想要键值的sorting或源序列列表,您可能需要考虑使用TreeMap或LinkedHashMap。