在下面的代码中,我正在创建一个临时哈希图,并将其作为值添加到另一个哈希图中,在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;
}
答案 0 :(得分:1)
您在while循环外创建tempMap,因此它是您一直使用的同一实例,将创建内容移入循环内,以便csvList中的每个pKey都获得一个唯一的实例
while (scanner.hasNext()) {
HashMap<String, String> tempMap = new HashMap<String, String>();
...