我正在以XLSX的格式从excel中读取数据,并将每张图纸的数据存储在地图列表中。列表中的每个项目表示工作表中每行的列和值。但是,每个映射的列和值的顺序不符合原始excel表的正确顺序。我想要的是从左到右的顺序,这样我以后就可以用我的地图列表来写excel了。我能做些什么来实现它?excel表格示例:
column 1 column2
value1 value2
value3 value4
顺序混乱的地图列表:
0 = "column2" -> value2
"column1" -> value1
1 = "column2" -> value4
"column1" -> value3
我的代码片段:
public static List<Map<String, String>> readExcelSheet(Sheet sheet) {
Iterator<Row> rows = sheet.iterator();
if (!rows.hasNext()) {
return Collections.emptyList();
}
Row header = rows.next();
List<String> keys = new ArrayList<>();
for (Cell cell : header) {
String value = cell.getStringCellValue();
if (!value.isEmpty()) {
keys.add(value);
} else {
break;
}
}
List<Map<String, String>> result = new ArrayList<>();
while (rows.hasNext()) {
Row row = rows.next();
Map<String, String> rowMap = new HashMap<>();
for (int i = 0; i < keys.size(); ++i) {
Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
String value;
value = cell.toString();
rowMap.put(keys.get(i), value);
}
// Only add rows which aren't empty
if (!rowMap.values().stream().allMatch(String::isEmpty)) {
result.add(rowMap);
}
}
return result;
}
非常不确定您想要的输出,以及order mixed up
是什么意思。这是你的预期产出吗?
0 = "column1" -> value1
"column2" -> value2
1 = "column1" -> value3
"column2" -> value4
如果是这样,您可以尝试使用LinkedHashMap或TreeMap来排序您的地图。
更多阅读此处另一个链接