请问如何使用java poi 和mutivaluemap 实现表格数据的比对
时间: 2024-02-13 12:02:33 浏览: 113
使用Java POI和MultivaluedMap实现表格数据的比对,可以按照以下步骤进行:
1. 使用POI读取两个Excel表格,将数据分别存储在两个List中。
2. 使用MultivaluedMap将List中的数据以键值对的形式存储,其中键为表格中的主键,值为该行数据的Map。
3. 遍历第一个List中的数据,逐条比对其在第二个List中是否存在相同主键的数据,如果存在,则比对其它字段是否相同。
4. 如果存在不同的字段,则将其记录下来,并将其添加到新的List中。
以下是示例代码:
```
// 读取Excel表格
Workbook workbook1 = WorkbookFactory.create(new File("first.xlsx"));
Workbook workbook2 = WorkbookFactory.create(new File("second.xlsx"));
// 读取表格中的数据
List<Map<String, Object>> list1 = new ArrayList<>();
List<Map<String, Object>> list2 = new ArrayList<>();
Sheet sheet1 = workbook1.getSheetAt(0);
Sheet sheet2 = workbook2.getSheetAt(0);
for (Row row : sheet1) {
Map<String, Object> map = new HashMap<>();
map.put("id", row.getCell(0));
map.put("name", row.getCell(1));
map.put("age", row.getCell(2));
list1.add(map);
}
for (Row row : sheet2) {
Map<String, Object> map = new HashMap<>();
map.put("id", row.getCell(0));
map.put("name", row.getCell(1));
map.put("age", row.getCell(2));
list2.add(map);
}
// 将数据存储到MultivaluedMap中
MultivaluedMap<String, Map<String, Object>> map1 = new ArrayListValuedHashMap<>();
MultivaluedMap<String, Map<String, Object>> map2 = new ArrayListValuedHashMap<>();
for (Map<String, Object> map : list1) {
map1.put(map.get("id"), map);
}
for (Map<String, Object> map : list2) {
map2.put(map.get("id"), map);
}
// 比对数据
List<Map<String, Object>> diffList = new ArrayList<>();
for (Map.Entry<String, List<Map<String, Object>>> entry : map1.entrySet()) {
String key = entry.getKey();
List<Map<String, Object>> value1 = entry.getValue();
List<Map<String, Object>> value2 = map2.get(key);
if (value2 != null) {
for (Map<String, Object> map1 : value1) {
for (Map<String, Object> map2 : value2) {
if (!map1.equals(map2)) {
Map<String, Object> diffMap = new HashMap<>();
diffMap.put("id", key);
diffMap.put("fieldName", "name");
diffMap.put("value1", map1.get("name"));
diffMap.put("value2", map2.get("name"));
diffList.add(diffMap);
}
}
}
}
}
// 输出结果
for (Map<String, Object> map : diffList) {
System.out.println(map);
}
```
注意:以上代码仅为示例,实际应用中还需要进行数据类型转换、异常处理等操作。
阅读全文