繁体   English   中英

在 HashMap Apache POI 中读取并存储多个值

[英]Read and store the multiple value in HashMap Apache POI

在 Excel 中,我有如下数据,其中第一行是标题。

           ProductName                  ProductSubType 
    COMPREHENSIVE INSURANCE         COMPREHENSIVE INSURANCE
    COMPREHENSIVE INSURANCE         DRIVER & PASSENGER
    COMPREHENSIVE INSURANCE         THIRD PARTY INSURANCE
    DEBT PROTECTION                 CREDIT LIFE
    DEBT PROTECTION                 RETRENCHMENT

下面是我试过的代码。

 XSSFSheet myExcelSheet3 = xssfWorkbook.getSheet("Sheet3");
  XSSFRow xssfRow3 = myExcelSheet3.getRow(0);

    Integer columnIndexKey = null;
    for (Cell cell : xssfRow3) {
        if (cell.getStringCellValue().equalsIgnoreCase("ProductType")) {
            columnIndexKey = cell.getColumnIndex();
            break;
        }
    }
    Set<String> stringKey = new HashSet<>();
    if (columnIndexKey != null) {
        for (Row row : myExcelSheet3) {
            if (row.getRowNum() == 0) {
                continue;
            }
            Cell cell = row.getCell(columnIndexKey);
            stringKey.add(getCellData(xssfWorkbook, cell));
        }
    }
    List<String> stringKeyList = new ArrayList<>(stringKey);
    Collections.sort(stringKeyList);

获取值,即 ProductSubType 作为列表

List<String> stringValue = new ArrayList<>();
        if (columnIndexValue != null) {
            for (Row row : myExcelSheet3) {
                if (row.getRowNum() == 0) {
                    continue;
                }
                Cell cell = row.getCell(columnIndexValue);
                stringValue.add(getCellData(xssfWorkbook, cell));
            }
        }

最后在 HashMap 中添加键和值

 Map<List<String>, List<String>> stringListMap = new HashMap<>();
  stringListMap.put(stringKeyList,stringListValue);
  stringListMap.forEach((k,v) -> System.out.println("Key = "+ k + ", Value = " + v));

我得到的输出是

Key = [COMPREHENSIVE INSURANCE, DEBT PROTECTION], Value = [COMPREHENSIVE INSURANCE, DRIVER & PASSENGER, THIRD PARTY INSURANCE, CREDIT LIFE, RETRENCHMENT]

但是我想要以下格式的输出。

COMPREHENSIVE INSURANCE -> COMPREHENSIVE INSURANCE, DRIVER & PASSENGER, THIRD PARTY INSURANCE
DEBT PROTECTION -> CREDIT LIFE, RETRENCHMENT.

使用Map<String, List<String>>而不是Map<List<String>, List<String>>并像这样重新排序代码。

//Calculate columnIndexKey and columnIndexValue

Map<String, List<String>> result = new HashMap<>();
if (columnIndexKey != null && comumnIndexValue != null) {
    for (Row row : myExcelSheet3) {
        if (row.getRowNum() == 0) {
            continue;
        }
        Cell cell = row.getCell(columnIndexKey);
        Cell valueCell = row.getCell(columnIndexValue);

        String key = getCellData(xssfWorkbook, cell);
        String value = getCellData(xssfWorkbook, valueCell);

        if (!result.contains(key)) {
            result.put(key, new ArrayList<>());
        }
        result.get(key).add(value);
    }
}

result.foreach((k, v) -> System.out.println("Key = "+ k + ", Value = " + v));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM