将哈希图作为值添加到哈希图中

时间:2018-11-27 12:20:36

标签: java hashmap

在下面的代码中,我正在创建一个临时哈希图,并将其作为值添加到另一个哈希图中,在while循环结束时,csvList哈希图仅将temp的最后一个值添加为值,所有其他值为空

键将保留,所有值都将替换为null。 我在这里做错什么了,是temp.clear还是在声明临时哈希图的位置。

HashMap<String, HashMap<String, String>> csvList = new HashMap<String, HashMap<String, String>>();

HashMap<String, String> tempMap = new HashMap<String, String>();
List<String> line = null;
try {
    inputStream = new FileInputStream(csvFile);

    //scanner = new Scanner(inputStream);
    scanner = new Scanner(inputStream, "UTF-8");
    //scanner.useDelimiter("\r\n");

    int i = 0;
    while (scanner.hasNext()) {
        //tempMap.clear();
        if (i == 0) {
            headList = parseLine(scanner.nextLine());
            i++;
        } else {
            line = parseLine(scanner.nextLine());
            pKey = "";

            for (int j = 0; j < line.size(); j++) {
                if (!selectClause.toLowerCase().contains(headList.get(j).toLowerCase()))
                    continue;
                else {
                    // Change for multiple PKeys
                    if (primaryKey.toLowerCase().contains(headList.get(j).toLowerCase())) {
                        pKey = pKey + line.get(j);
                    }
                    if (headList.get(j).equalsIgnoreCase(primaryKey))
                        pKey = line.get(j);
                    tempMap.put(headList.get(j).toLowerCase(), line.get(j));
                }
            }
            //System.out.println(i++);
            line.clear();
            csvList.put(pKey, tempMap);
        }
        //tempMap.clear();

    }
    headList.clear();
    //tempMap.clear();
    scanner.close();
    }

    return csvList;
}

1 个答案:

答案 0 :(得分:1)

您在while循环外创建tempMap,因此它是您一直使用的同一实例,将创建内容移入循环内,以便csvList中的每个pKey都获得一个唯一的实例

while (scanner.hasNext()) {
    HashMap<String, String> tempMap = new HashMap<String, String>();
    ...