Мне нужно что-то вроде DataTable в Java - PullRequest
2 голосов
/ 09 августа 2011

Я оглянулся, но не могу найти ничего, что мне нужно.

Мне нужно прочитать в CSV-файл с заголовками столбцов, например:

NAME;AGE;HEIGHT
dan;36;180
john;31;181
ben;30;190

какой объект я могу разобрать в чтение, где я могу ссылаться на него так:

object.name = (string) someSortOfDataStructure["NAME"];
object.name = (int) someSortOfDataStructure["AGE"];

или

object.name = someSortOfDataStructure.getColumn("NAME");

В C # я могу сделать это с чем-то вроде DataTable / DataRow.

Ответы [ 3 ]

4 голосов
/ 09 августа 2011

Думай ООП. Вам необходимо создать класс Person со свойствами name, age и height.

public class Person {

  private String name;
  private String age;
  private String height;

  // Getter and setter methods...
}

Затем прочитайте файл CSV построчно, используя BufferedReader. Для каждой строки вы хотите разделить строку, используя line.split(";");, чтобы получить String[], содержащий токены.

Для линии теперь вы можете создать Person из токенов;

Person person = new Person();
person.setName(tokens[0]);
person.setAge(tokens[1]);
person.setHeight(tokens[2]);

Обратите внимание, что предполагает положения столбцов. Если вы хотите удалить это предположение, вам нужно Map заголовок позиции.

String headerLine = "NAME;AGE;HEIGHT";
String[] headers = headerLine.split(";");
Map<String,Integer> map = new HashMap<String,Integer>();
for (int i=0; i<headers.length; i++) {
  map.put(headers[i], i);
}

Вы можете получить позицию столбца по его имени;

Person person = new Person();
person.setName(tokens[map.get("NAME")]);
person.setAge(tokens[map.get("AGE")]);
person.setHeight(tokens[map.get("HEIGHT")]);

Table классы типа являются анти-паттернами. Они имеют тенденцию появляться, когда программист не может думать о терминах объектов. Я часто вижу Table классы в унаследованных Java-приложениях, и это настоящая PITA для работы с ними. Не делай этого.

0 голосов
/ 09 августа 2011

Библиотека Guava имеет интерфейс Table, который должен быть тем, что вам нужно.

0 голосов
/ 09 августа 2011

Хорошо ... Вы можете использовать модель таблицы по умолчанию. Это сделано для поддержки качающихся столов, я не уверен, сможет ли это помочь вам или нет. http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/table/DefaultTableModel.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...