Клиент отправляет мне списки пар ключ-значение, которые мне нужно добавить в CSV-файл с заголовками .
lang=java lang, version, maven
version=1.8 -----> java, 1.8, true
maven=true
и другой ввод может быть:
lang=C# lang, version, maven
version=7.2 -----> java, 1.8, true
maven=false C#, 7.2, false
Число списков может составлять несколько миллионов, поэтому мне нужно сбросить данные на диск, и я не могу хранить все это в памяти.
Поскольку список ключей определяется клиентом, я, однако, использую первый вход от него для определения заголовков файла CSV:
org.apache.commons.csv.CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(x, y, z ...)));
и с этого момента добавлять только значения в соответствующих столбцах:
csvPrinter.printRecord(xValue, yValue, zValue.....)
Однако, это непослушный клиент, и иногда он посылает новый ключ, который я никогда раньше не видел:
lang=java
meetMeAt=London
version=1.4
maven=false
Как, на данный момент, я могу добавить еще один заголовок в CSV?
Как насчет того, чтобы сначала сохранить все списки в CSV-файле без заголовков , накопить все заголовки в памяти программы, а затем создать другой файл со всеми заголовками и скопировать в него записи из первого файла ? Разумно ли это?