LinkedHashMap из CSV не получает все записи - PullRequest
0 голосов
/ 12 декабря 2018

CSV файл в переменную по порядку.Я пытался прочитать CSV-файл, который содержит два столбца, заголовок, а затем список записей.

В настоящее время я использую LinkedHashMap;используя следующий цикл для чтения, разделения и создания LinkedHashMap.

Однако в настоящее время он застревает в строке 5 моего CSV.Вот текущий цикл чтения:

public static LinkedHashMap<String, ArrayList<String>> runningOrderMap(String filename) throws IOException {
        LinkedHashMap<String, ArrayList<String>> linkedHashMap = new LinkedHashMap<>(50);
        String currentLine = ""; //init iterator variable
        String[] valuesTMP;
        try {
            bufferedReader = new BufferedReader(new FileReader(filename));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        while((currentLine = bufferedReader.readLine()) != null){
            valuesTMP = currentLine.split(", ");
            ArrayList<String> values = new ArrayList<>();
            String key = valuesTMP[0].split("\t")[0].trim();
            values.add(valuesTMP[0].split("\t")[1].trim());
            for(int i = 1; i < valuesTMP.length; i++){
                values.add(valuesTMP[i]);
                System.out.println(valuesTMP[i]);
                linkedHashMap.put(key, values);
            }
        }
        System.out.println("linked hashmap:"+linkedHashMap.keySet().size());
        return linkedHashMap;
    }

пример данных отформатирован как таковой, заголовок, который изменяется по длине, вкладка, а затем список записей контента, как это:

title   content, content2

title example    content, content2, content3

title example three   content, content2

title example    content, content2

и эти данные продолжаются около 20 строк, однако LinkedHashMap не будет проходить после строки 5:

title example two   content

Мне нужно сохранить порядок строк в массиве.

1 Ответ

0 голосов
/ 12 декабря 2018

Кажется, я знаю, что не так)

Попробуйте переместить строку linkedHashMap.put(key, values); из внутреннего цикла for, например:

public static LinkedHashMap<String, ArrayList<String>> runningOrderMap(String filename) throws IOException {
    LinkedHashMap<String, ArrayList<String>> linkedHashMap = new LinkedHashMap<>(50);
    String currentLine = ""; //init iterator variable
    String[] valuesTMP;
    try {
        bufferedReader = new BufferedReader(new FileReader(filename));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    while((currentLine = bufferedReader.readLine()) != null){
        valuesTMP = currentLine.split(", ");
        ArrayList<String> values = new ArrayList<>();
        String key = valuesTMP[0].split("\t")[0].trim();
        values.add(valuesTMP[0].split("\t")[1].trim());
        for(int i = 1; i < valuesTMP.length; i++){
            values.add(valuesTMP[i]);
            System.out.println(valuesTMP[i]);
        }
        linkedHashMap.put(key, values); // <--this line was moved out from internal for loop
    }
    System.out.println("linked hashmap:"+linkedHashMap.keySet().size());
    return linkedHashMap;
}

Потому что, вы видите, этовнутренний цикл for выполняется только в том случае, если имеется более одной части содержимого

...