Группировка даних CSV file Java Console Application

Есть CSV file с даними и разделителем кома между столбцами. Csv file прикреплен ниже Нужно по группировать эти данные и сгенерировать новый CSV file в таком формате введите сюда описание изображения. Я файл открываю через BufferedReader, а дальше не понимаю как его группировать


Ответы (1 шт):

Автор решения: Олексій Моренець
public static void main(String[] args) throws IOException {
    Stream<String> lines = Files.lines(Paths.get("test - test.csv")).skip(1);
    Map<String, Map<LocalDate, Integer>> map = groupByNameAndDate(lines);

    // print
    map.forEach((s, localDateIntegerMap) -> {
        System.out.print(s);
        localDateIntegerMap.forEach((date, numPatients) -> System.out.print(" " + date + " " + numPatients));
        System.out.println();
    });
}

private static Map<String, Map<LocalDate, Integer>> groupByNameAndDate(Stream<String> lines) {
    Map<String, Map<LocalDate, Integer>> map = new TreeMap<>();
    lines.forEach(s -> {
        String[] parsedParts = s.split(",");
        String name = parsedParts[0];
        Map<LocalDate, Integer> localDateIntegerMap = map.get(name);
        if (localDateIntegerMap == null) {
            localDateIntegerMap = new TreeMap<>();
        }
        LocalDate date = LocalDate.parse(parsedParts[1], DateTimeFormatter.ofPattern("MMM dd yyyy"));
        Integer numOfPatients = localDateIntegerMap.get(date);
        if (numOfPatients == null) {
            numOfPatients = 0;
        }
        localDateIntegerMap.put(date, numOfPatients + Integer.parseInt(parsedParts[2]));
        map.put(name, localDateIntegerMap);
    });
    return map;
}

Ну формат вывода вы уж сами выберите, главное, данные сгруппированы

→ Ссылка