Добавить hashmap в hashmap как значение - PullRequest
0 голосов
/ 27 ноября 2018

В приведенном ниже коде я создаю временную хеш-карту и добавляю ее в качестве значения в другую хеш-карту, в конце цикла while у хеш-карты csvList есть только последнее значение временной карты, добавленной в качестве значения, вседругие значения являются нулевыми

Ключ сохраняется, и все значения заменяются нулевыми.Что я делаю здесь неправильно, это 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 голосов
/ 27 ноября 2018

Вы создаете tempMap вне цикла while, так что это тот же экземпляр, который вы используете все время, перемещаете создание внутри цикла, чтобы каждый pKey в csvList получал уникальный экземпляр

while (scanner.hasNext()) {
    HashMap<String, String> tempMap = new HashMap<String, String>();
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...