Я уже давно ломаю голову над этой проблемой. Я в основном пытаюсь создать древовидную иерархию из набора данных CSV. Данные CSV не обязательно заказываются. Это похоже на следующее:
Header: Record1,Record2,Value1,Value2
Row: A,XX,22,33
Row: A,XX,777,888
Row: A,YY,33,11
Row: B,XX,12,0
Row: A,YY,13,23
Row: B,YY,44,98
Я пытаюсь сделать способ группирования как можно более гибким.Самый простой способ группировки - это сделать это для Record1 и Record2 со значениями Value1 и Value2, хранящимися в Record2, чтобы мы получили следующий результат:
Record1
Record2
Value1 Value2
Что будет:
A
XX
22,33
777,888
YY
33,11
13,23
B
XX
12,0
YY
44,98
В настоящее время я сохраняю настройки моей группы в списке. - я не знаю, мешает ли это моим мыслям. Этот список содержит иерархию групп, например:
Record1 (SchemaGroup)
.column = Record1
.columns = null
.childGroups =
Record2 (SchemaGroup)
.column = Record1
.columns = Value1 (CSVColumnInformation), Value2 (CSVColumnInformation)
.childGroups = null
Код для этого выглядит следующим образом:
private class SchemaGroup {
private SchemaGroupType type = SchemaGroupType.StaticText; // default to text
private String text;
private CSVColumnInformation column = null;
private List<SchemaGroup> childGroups = new ArrayList<SchemaGroup>();
private List<CSVColumnInformation> columns = new ArrayList<CSVColumnInformation>();
}
private enum SchemaGroupType {
/** Allow fixed text groups to be added */
StaticText,
/** Related to a column with common value */
ColumnGroup
}
Я с трудом создаю алгоритм для этого, пытаясь придумать базовую структуру для использования. В настоящее время я разбираю CSV сверху вниз, используя свой собственный класс-оболочку:
CSVParser csv = new CSVParser(content);
String[] line;
while((line = csv.readLine()) != null ) {
...
}
Я просто пытаюсь запустить свой мозг кодирования.
Есть мысли?