【问题标题】:Read and store the multiple value in HashMap Apache POI在 HashMap Apache POI 中读取并存储多个值
【发布时间】:2019-12-01 08:48:17
【问题描述】:

在 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

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中添加key和value

 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.

【问题讨论】:

    标签: java hashmap apache-poi


    【解决方案1】:

    使用Map&lt;String, List&lt;String&gt;&gt; 而不是Map&lt;List&lt;String&gt;, List&lt;String&gt;&gt; 并像这样重新排列您的代码。

    //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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2021-05-15
      • 1970-01-01
      相关资源
      最近更新 更多